QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#287816#7876. Cyclic Substringsdaniel14311531TL 1ms12020kbC++141.0kb2023-12-21 00:41:192023-12-21 00:41:19

Judging History

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

  • [2023-12-21 00:41:19]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:12020kb
  • [2023-12-21 00:41:19]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int N = 3000010;
int n, ans = 0;
string s;
int tot = 1, fail[N * 2], len[N * 2], fa[N * 2];
int sz[N * 2];
int ch[N * 2][10], cur = 0;

int gfail(int x, int now) {
	for(; now - len[x] - 1 < 1 || s[now - len[x] - 1] != s[now]; x = fail[x]);
	return x;
}
void insert(int now, int c) {
	int pos = gfail(cur, now);
	if(!ch[pos][c]) {
		++tot;
		fail[tot] = ch[gfail(fail[pos], now)][c];
		ch[pos][c] = tot, len[tot] = len[pos] + 2, fa[tot] = pos;
	}
	cur = ch[pos][c];
	if(now > n) ++sz[cur];
}
int main() {
	ios::sync_with_stdio(0); cin.tie(nullptr);
	cin >> n; cin >> s; s = "a" + s;
	for(int i = 1; i <= n; i++) s = s + s[i];
	len[0] = 0, len[1] = -1, fail[1] = 0, fail[0] = 1;
	for(int i = 1; i <= n + n; i++) {
		insert(i, s[i] - '0');
	}
	for(int i = tot; i > 1; i--) {
		if(len[i] <= n) {
			ans = (ans + 1ll * len[i] * sz[i] % mod * sz[i]) % mod;
		}
		sz[fail[i]] = (sz[fail[i]] + sz[i]) % mod;
	}
	cout << ans << "\n";
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 11756kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

score: 0
Accepted
time: 0ms
memory: 12020kb

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

score: 0
Accepted
time: 1ms
memory: 11760kb

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 1ms
memory: 11752kb

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

score: 0
Accepted
time: 1ms
memory: 11820kb

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 0
Accepted
time: 1ms
memory: 11728kb

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

score: 0
Accepted
time: 1ms
memory: 11712kb

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: -100
Time Limit Exceeded

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:


result: