CSES - Datatähti 2018 alku - Results
Submission details
Task:Merkkijono
Sender:inv41idu53rn4m3
Submission time:2017-10-03 18:19:26 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#20.04 sdetails
#30.06 sdetails
#4ACCEPTED0.04 sdetails
#50.04 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.04 sdetails
#8ACCEPTED0.03 sdetails
#9ACCEPTED0.04 sdetails
#10ACCEPTED0.04 sdetails

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[1000]; // Array for input data
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 < 1000; 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
// Maybe the newline was wrong?
return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...

correct output
ABABABABABABABABABABABABABABAB...

user output
ABABABABABABABABABABABABABABAB...

Test 2

Verdict:

input
AABBAABBAABBAABBAABBAABBAABBAA...

correct output
(empty)

user output
BB

Test 3

Verdict:

input
ABABABABABABABABABABABABABABAB...

correct output
(empty)

user output
ABABABABABABABABABABABABABABAB...

Test 4

Verdict: ACCEPTED

input
BBABABBBBBAABBBABABABBBBAAABAB...

correct output
BAB

user output
BAB

Test 5

Verdict:

input
ACDCBBACDBBBACAACBBDBADBAABABA...

correct output
ACDCACDADBADABACACDCADADABABCA...

user output
ACDCACDADBADABACACDCADADABABCA...

Test 6

Verdict: ACCEPTED

input
EETFHIJOGACDHMGVFJCMETMZDEITTR...

correct output
TFHIJOGACDHMGVFJCMETMZDEIROTET...

user output
TFHIJOGACDHMGVFJCMETMZDEIROTET...

Test 7

Verdict: ACCEPTED

input
GOONLAHLYPRFCZKIKSJWAWWYJJPCDB...

correct output
GNLAHLYPRFCZKIKSJWAYPCDNWYMRCE...

user output
GNLAHLYPRFCZKIKSJWAYPCDNWYMRCE...

Test 8

Verdict: ACCEPTED

input
PISHWMOTCDDZFRMYMOMYDYYGJZIQHS...

correct output
PISHWMOTCZFRMYMOMYDGJZIQHSVAOK...

user output
PISHWMOTCZFRMYMOMYDGJZIQHSVAOK...

Test 9

Verdict: ACCEPTED

input
QUVVTPXAMWWODFXRONJODPGBTCISGM...

correct output
QUTPXAMODFXRONJODPGBTCISGMVRBW...

user output
QUTPXAMODFXRONJODPGBTCISGMVRBW...

Test 10

Verdict: ACCEPTED

input
POXHAHYEZTLYNFSLABODMRNKDSKROZ...

correct output
POXHAHYEZTLYNFSLABODMRNKDSKROZ...

user output
POXHAHYEZTLYNFSLABODMRNKDSKROZ...