QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#291137#6224. 节日庆典MoRanSky100 ✓613ms18448kbC++231.8kb2023-12-26 05:01:592023-12-26 05:02:00

Judging History

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

  • [2023-12-26 05:02:00]
  • 评测
  • 测评结果:100
  • 用时:613ms
  • 内存:18448kb
  • [2023-12-26 05:01:59]
  • 提交

answer

// Skyqwq
#include <bits/stdc++.h>

#define pb push_back
#define fi first
#define se second
#define mp make_pair

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; }
template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; }

template <typename T> void inline read(T &x) {
    int f = 1; x = 0; char s = getchar();
    while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); }
    while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
    x *= f;
}

const int N = 3e6 + 5;

char s[N];

int n, z[N];

void inline exKMP() {
	z[1] = n;
	int r = 0, mid = 0;
	for (int i = 2; i <= n; i++) {
		if (i <= r) z[i] = min(r - i + 1, z[i - mid + 1]);
		while (i + z[i] <= n && s[i + z[i]] == s[1 + z[i]]) ++z[i];
		if (i + z[i] - 1 > r) r = i + z[i] - 1, mid = i;
	}
}

// compare pre1 and prex in lens m

int inline cmp(int x, int m) {
	int o = z[x];
	if (o >= m) return 0;
	return s[1 + o] < s[x + o] ? -1 : 1;
}

// x > y, in pre i

int inline chk(int x, int y, int i) {
	if (x == y) return 0;
	int o = cmp(y + i - x + 1, x - y);
	if (o) return o;
	o = cmp(x - y + 1, y - 1);
	if (!o) return 1;
	return o * -1;
}

vector<int> A;

int main() {
    scanf("%s", s + 1); n = strlen(s + 1);
    exKMP();
    for (int i = 1; i <= n; i++) {
    	vector<int> t;
    	t.pb(i);
    	for (int v: A) {
    		while (t.size() && s[i] > s[v + i - t.back()]) t.pop_back();
    		if (!t.size() || s[i] == s[v + i - t.back()]) {
    			while (t.size() && i - v + 1 < 2 * (i - t.back() + 1)) t.pop_back();
    			t.pb(v);
    		}
    	}
    	A = t;
    	int ans = A[0];
    	for (int v: A) {
    		if (chk(ans, v, i) == 1) ans = v;
    	}
    	printf("%d ", ans);
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 10
Accepted
time: 0ms
memory: 5840kb

input:

cabacabacaccabbbaa

output:

1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 17 

result:

ok 18 numbers

Test #2:

score: 10
Accepted
time: 1ms
memory: 7904kb

input:

cabacabacbaaabbccccaabbabbccabbbbbbbcaccbcbcccbbbccbccbbcccabacbacccbbcacbcabcbcbabbacbccbacbbbbbbaacbbbcccbbcccbbaacaccababaacacccbbbabbbcaaaabcabaacabcacaabbacabcbaccbbbbbcaacccabcacbbbabbaccabaccbbaacccababbacbaacaaabbbbabbbbbbbbcacbabaabababbbacabcbabacbccaaacbabcaaccbbcbacaaccbacbabaccaccbcbcbb...

output:

1 2 2 2 2 2 2 2 2 2 2 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11...

result:

ok 1000 numbers

Test #3:

score: 10
Accepted
time: 1ms
memory: 6076kb

input:

cabacabacbbaaaacbbabcbaaacbabcaaaacccaabaacbcccabbabcabbabcaacbccbbbcbbaabbabaabcbbaaacababccbbbbaacccbabbbcbbababcbbbaaabbbbcbcbbcbbacaaccbbaacbbcbccacaaabaccbccbaacbaaccaccacacbbcaacaacccbbabbbabbaaaacabcbaaacccbcacbabbaaccaccbbcbcbbccabbcbbababaaccabccbabaacacabcaacccbaccccacccbcbccccbabcbaccbcbc...

output:

1 2 2 2 2 2 2 2 2 2 2 2 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 31 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 ...

result:

ok 1000 numbers

Test #4:

score: 10
Accepted
time: 21ms
memory: 6624kb

input:

cabacabaacbbbcbaaacbbacbcccbccaacbcaaaacabcbcbbcabaabcbccbabcabcbacbaccaaccaccbccacbcaacaaaaabbaabcabacacbcbaccacabcbcccabcbbcccbbcccbaccccbcbabcccbcabacabcbaccacababbcabcaccaaabcbacccaabaaabcacacacbaacbccacccccaacaaabbbcabaabbbabbcccbccbccaabccaacabcacbbcabaccaacaacbacbcabcaccbababbaaababaaaabcaaba...

output:

1 2 2 2 2 2 2 2 8 8 8 8 8 8 8 8 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 89 89 89 89 89 89 89 89 89 89 89 89 89 89 8...

result:

ok 200000 numbers

Test #5:

score: 10
Accepted
time: 7ms
memory: 5952kb

input:

yzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzyzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxz...

output:

1 1 3 1 5 1 7 1 9 1 11 1 13 1 15 1 17 1 19 1 21 1 23 1 25 1 27 1 29 1 31 1 33 1 35 1 37 1 39 1 41 1 43 1 45 1 47 1 49 1 51 1 53 1 55 1 57 1 59 1 61 1 63 1 65 1 67 1 69 1 71 1 73 1 75 1 77 1 79 1 81 1 83 1 85 1 87 1 89 1 91 1 93 1 95 1 97 1 99 1 101 1 103 1 105 1 107 1 109 1 111 1 113 1 115 1 117 1 1...

result:

ok 49400 numbers

Test #6:

score: 10
Accepted
time: 174ms
memory: 6712kb

input:

tutvtutwtutvtutxtutvtutwtutvtutytutvtutwtutvtutxtutvtutwtutvtuttutvtutwtutvtutxtutvtutwtutvtutytutvtutwtutvtutxtutvtutwtutvtuttutvtutwtutvtutxtutvtutwtutvtutytutvtutwtutvtutxtutvtutwtutvtuttutvtutwtutvtutxtutvtutwtutvtutytutvtutwtutvtutxtutvtutwtutvtuttutvtutwtutvtutxtutvtutwtutvtutytutvtutwtutvtutx...

output:

1 1 3 1 5 5 7 1 9 9 11 9 13 13 15 1 17 17 19 17 21 21 23 17 25 25 27 25 29 29 31 1 33 33 35 33 37 37 39 33 41 41 43 41 45 45 47 33 49 49 51 49 53 53 55 49 57 57 59 57 61 61 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 6...

result:

ok 1000000 numbers

Test #7:

score: 10
Accepted
time: 167ms
memory: 7860kb

input:

stsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsust...

output:

1 1 3 1 5 5 7 1 9 9 11 9 13 13 15 1 17 17 19 17 21 21 23 17 25 25 27 25 29 29 31 1 33 33 35 33 37 37 39 33 41 41 43 41 45 45 47 33 49 49 51 49 53 53 55 49 57 57 59 57 61 61 63 1 65 65 67 65 69 69 71 65 73 73 75 73 77 77 79 65 81 81 83 81 85 85 87 81 89 89 91 89 93 93 95 65 97 97 99 97 101 101 103 97...

result:

ok 1000000 numbers

Test #8:

score: 10
Accepted
time: 613ms
memory: 12404kb

input:

stsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsust...

output:

1 1 3 1 5 5 7 1 9 9 11 9 13 13 15 1 17 17 19 17 21 21 23 17 25 25 27 25 29 29 31 1 33 33 35 33 37 37 39 33 41 41 43 41 45 45 47 33 49 49 51 49 53 53 55 49 57 57 59 57 61 61 63 1 65 65 67 65 69 69 71 65 73 73 75 73 77 77 79 65 81 81 83 81 85 85 87 81 89 89 91 89 93 93 95 65 97 97 99 97 101 101 103 97...

result:

ok 3000000 numbers

Test #9:

score: 10
Accepted
time: 556ms
memory: 18448kb

input:

abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabac...

output:

1 1 3 1 5 5 7 1 9 9 11 9 13 13 15 1 17 17 19 17 21 21 23 17 25 25 27 25 29 29 31 1 33 33 35 33 37 37 39 33 41 41 43 41 45 45 47 33 49 49 51 49 53 53 55 49 57 57 59 57 61 61 63 1 65 65 67 65 69 69 71 65 73 73 75 73 77 77 79 65 81 81 83 81 85 85 87 81 89 89 91 89 93 93 95 65 97 97 99 97 101 101 103 97...

result:

ok 3000000 numbers

Test #10:

score: 10
Accepted
time: 459ms
memory: 11280kb

input:

stsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsystsustsvstsustswstsustsvstsustsxstsustsvstsustswstsustsvstsustsstsustsvstsustswstsustsvstsustsxstsustsvstsust...

output:

1 1 3 1 5 5 7 1 9 9 11 9 13 13 15 1 17 17 19 17 21 21 23 17 25 25 27 25 29 29 31 1 33 33 35 33 37 37 39 33 41 41 43 41 45 45 47 33 49 49 51 49 53 53 55 49 57 57 59 57 61 61 63 1 65 65 67 65 69 69 71 65 73 73 75 73 77 77 79 65 81 81 83 81 85 85 87 81 89 89 91 89 93 93 95 65 97 97 99 97 101 101 103 97...

result:

ok 3000000 numbers

Extra Test:

score: 0
Extra Test Passed