Code Submission Evaluation System Login

Datatähti 2018 alku

Start:2017-10-02 00:00:00
End:2017-10-16 00:00:00
 

Tasks | Messages | Scoreboard | Statistics


CSES - Datatähti 2018 alku - Results
History
2017-10-03 18:32:33100
2017-10-03 18:19:260
2017-10-03 18:12:230
Task:Merkkijono
Sender:inv41idu53rn4m3
Submission time:2017-10-03 18:32:33
Language:C++
Status:READY
Score:100

Feedback

groupverdictscore
#1ACCEPTED

Test results

testverdicttime (s)
#1ACCEPTED0.05 / 1.00details
#2ACCEPTED0.04 / 1.00details
#3ACCEPTED0.05 / 1.00details
#4ACCEPTED0.05 / 1.00details
#5ACCEPTED0.04 / 1.00details
#6ACCEPTED0.04 / 1.00details
#7ACCEPTED0.04 / 1.00details
#8ACCEPTED0.04 / 1.00details
#9ACCEPTED0.04 / 1.00details
#10ACCEPTED0.06 / 1.00details

Code

#include <iostream>

using namespace std;

struct streak_start {
    char c; // Character the streak consists of
    int i; // The start position of the streak
};

int main() {
    char input[1001]; // Array for input data
    // The 1001 array length is a dirty workaround for strings of exactly 1000 chars
    streak_start stack[1000]; // Array for starts of potential streaks
    int sheight = 0; // Height of the streak "stack"
    bool streak = false; // Whether a streak is currently active

    cin >> input; // Read input

    stack[sheight] = {input[0], 0}; // Add first char to stack

    for (int n = 1; n < 1001; n++) {
        if (input[n] == 0) { // Stop if null is encountered
            // Remove the final streak if one was active
            if (streak) {
                for (int m = stack[sheight].i; m < n; m++) {
                    input[m] = 255; // This should never appear in the input
                }
            }
            break;
        }

        if (streak) {
            if (input[n] != stack[sheight].c) { // Streak no longer active
                sheight--; // Take streak off the stack (because it's over)

                if (input[n] != stack[sheight].c) { // Check for nested streaks
                    // When set of nested streaks ends, remove entries from list
                    for (int m = stack[sheight + 1].i; m < n; m++) {
                        input[m] = 255; // This should never appear in the input
                    }
                    streak = false;
                }
            }
        }

        if (!streak) {
            if (input[n] != stack[sheight].c) { // If unmatching, start new potential streak
                sheight++;
                stack[sheight] = {input[n], n};
            } else { // If characters match we have a streak
                streak = true;
            }
        }
        // This was useful for testing
        //cout << input[n] << " " << streak << endl;
    }

    for (int o = 0; o < 1000; o++) { // Output result
        if (input[o] == 0) { // We don't want to keep going after null
            break;
        }
        if (input[o] != (char) 255) { // Skip writing the marker char
            cout << input[o];
        }
    }

    cout << endl; // End with a newline

    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...
view   save

correct output
ABABABABABABABABABABABABABABAB...
view   save

user output
ABABABABABABABABABABABABABABAB...
view   save

Test 2

Verdict: ACCEPTED

input
AABBAABBAABBAABBAABBAABBAABBAA...
view   save

correct output
(no output)
view   save

user output
(no output)
view   save

Test 3

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...
view   save

correct output
(no output)
view   save

user output
(no output)
view   save

Test 4

Verdict: ACCEPTED

input
BBABABBBBBAABBBABABABBBBAAABAB...
view   save

correct output
BAB
view   save

user output
BAB
view   save

Test 5

Verdict: ACCEPTED

input
ACDCBBACDBBBACAACBBDBADBAABABA...
view   save

correct output
ACDCACDADBADABACACDCADADABABCA...
view   save

user output
ACDCACDADBADABACACDCADADABABCA...
view   save

Test 6

Verdict: ACCEPTED

input
EETFHIJOGACDHMGVFJCMETMZDEITTR...
view   save

correct output
TFHIJOGACDHMGVFJCMETMZDEIROTET...
view   save

user output
TFHIJOGACDHMGVFJCMETMZDEIROTET...
view   save

Test 7

Verdict: ACCEPTED

input
GOONLAHLYPRFCZKIKSJWAWWYJJPCDB...
view   save

correct output
GNLAHLYPRFCZKIKSJWAYPCDNWYMRCE...
view   save

user output
GNLAHLYPRFCZKIKSJWAYPCDNWYMRCE...
view   save

Test 8

Verdict: ACCEPTED

input
PISHWMOTCDDZFRMYMOMYDYYGJZIQHS...
view   save

correct output
PISHWMOTCZFRMYMOMYDGJZIQHSVAOK...
view   save

user output
PISHWMOTCZFRMYMOMYDGJZIQHSVAOK...
view   save

Test 9

Verdict: ACCEPTED

input
QUVVTPXAMWWODFXRONJODPGBTCISGM...
view   save

correct output
QUTPXAMODFXRONJODPGBTCISGMVRBW...
view   save

user output
QUTPXAMODFXRONJODPGBTCISGMVRBW...
view   save

Test 10

Verdict: ACCEPTED

input
POXHAHYEZTLYNFSLABODMRNKDSKROZ...
view   save

correct output
POXHAHYEZTLYNFSLABODMRNKDSKROZ...
view   save

user output
POXHAHYEZTLYNFSLABODMRNKDSKROZ...
view   save