| Task: | Merkkijono |
| Sender: | inv41idu53rn4m3 |
| Submission time: | 2017-10-03 18:32:33 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 100 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.05 s | details |
| #2 | ACCEPTED | 0.04 s | details |
| #3 | ACCEPTED | 0.05 s | details |
| #4 | ACCEPTED | 0.05 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | ACCEPTED | 0.04 s | details |
| #7 | ACCEPTED | 0.04 s | details |
| #8 | ACCEPTED | 0.04 s | details |
| #9 | ACCEPTED | 0.04 s | details |
| #10 | ACCEPTED | 0.06 s | details |
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... |
| correct output |
|---|
| ABABABABABABABABABABABABABABAB... |
| user output |
|---|
| ABABABABABABABABABABABABABABAB... |
Test 2
Verdict: ACCEPTED
| input |
|---|
| AABBAABBAABBAABBAABBAABBAABBAA... |
| correct output |
|---|
| (empty) |
| user output |
|---|
| (empty) |
Test 3
Verdict: ACCEPTED
| input |
|---|
| ABABABABABABABABABABABABABABAB... |
| correct output |
|---|
| (empty) |
| user output |
|---|
| (empty) |
Test 4
Verdict: ACCEPTED
| input |
|---|
| BBABABBBBBAABBBABABABBBBAAABAB... |
| correct output |
|---|
| BAB |
| user output |
|---|
| BAB |
Test 5
Verdict: ACCEPTED
| 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... |
