QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#99349#6299. Binary StringHunsterWA 2ms5608kbC++141.7kb2023-04-21 22:09:252023-04-21 22:09:30

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-21 22:09:30]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:5608kb
  • [2023-04-21 22:09:25]
  • 提交

answer

#include <bits/stdc++.h>

char str[10000005];
int n, next[10000005];

int main() {
    int data_count;
    scanf("%d", &data_count);
    for (int data = 1; data <= data_count; data++) {
        scanf("%s", str);
        n = std::strlen(str);
        [&] {
            int cnt0 = 0;
            for (int i = 0; i < n; i++) cnt0 += str[i] == '0';
            if (cnt0 <= n / 2) {
                std::reverse(str, str + n);
                for (int i = 0; i < n; i++) str[i] = str[i] == '0' ? '1' : '0';
            }
        }();
        int ans = std::max(
            [&] {
            int max = 0;
            for (int i = 0, now = 0; i < 5 * n; i++) {
                int p = i % n;
                if (str[p] == '1') now++;
                else now--;
                if (now < 0) now = 0;
                max = std::max(max, now);
            }
            return max;
            }(),
            0
        );
        for (int i = 0, now = 0, tag = 0; i < 5 * n; i++) {
            int p = i % n;
            if (str[p] == '1') now++;
            if (now && !tag) {
                str[p] = '1';
                now--;
                tag = 1;
            }
            else {
                str[p] = '0';
                tag = 0;
            }
        }
        for (int i = n - 1; i >= 0; i--) str[i + 1] = str[i];
        next[1] = 0;
        for (int i = 2, j = 0; i <= n; i++) {
            while (j != 0 && str[j + 1] != str[i]) j = next[j];
            if (str[j + 1] == str[i]) j++;
            next[i] = j;
        }
        if (n % (n - next[n]) == 0) ans += n - next[n];
        else ans += n;
        printf("%d\n", ans);
    }
    return 0;
}
/*
3
1
001001
0001111

*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 5608kb

input:

3
1
001001
0001111

output:

1
4
10

result:

wrong answer 2nd numbers differ - expected: '3', found: '4'