QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#764097#7876. Cyclic SubstringsAlphaZeAC ✓677ms923688kbC++201.4kb2024-11-20 00:14:312024-11-20 00:14:32

Judging History

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

  • [2024-11-20 00:14:32]
  • 评测
  • 测评结果:AC
  • 用时:677ms
  • 内存:923688kb
  • [2024-11-20 00:14:31]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#include <bits/stdc++.h>

using namespace std;

const int N = 6e6 + 10;
const int mod = 998244353;
void AddMod(int &p, int k) { p = (p + k) % mod; }
int n; char s[N]; 

struct Node {
	int len;
	int fail, ch[10];
}nd[N];
int last, tot = 1;
vector<int> g[N];
int f[N];
int ans;

void add(int x, int y) {
	g[x].push_back(y);
}

int getfail(int x, int i) {
	while (i - nd[x].len - 1 < 1 || s[i] != s[i - nd[x].len - 1]) x = nd[x].fail; 
	return x;
}

void insert(int i) {
	int p = getfail(last, i);
	if (!nd[p].ch[s[i] - '0']) {
		nd[++tot].len = nd[p].len + 2;
		nd[tot].fail = nd[getfail(nd[p].fail, i)].ch[s[i] - '0'];
		nd[p].ch[s[i] - '0'] = tot;
		// 先连fail边, 再连扩展状态的边. 
	}
	last = nd[p].ch[s[i] - '0'];
	if (i > n) {
		++f[last];
	}
} 

void dfs(int x) {
	for (auto y : g[x]) {
		dfs(y);
		AddMod(f[x], f[y]);
	}
	if (nd[x].len > 0 && nd[x].len <= n) {
		int v = 1ll * f[x] * f[x] % mod;
		AddMod(ans, 1ll * nd[x].len * v % mod);
	}
}

int main() {
	scanf("%d%s", &n, s + 1);
//	n = strlen(s + 1);
	nd[0].fail = 1; nd[0].len = 0; add(1, 0); // 偶根 
	nd[1].len = -1; // 奇根
	last = 0; tot = 1; 
	for (int i = 1; i <= n; ++i) s[i + n] = s[i];
	for (int i = 1; i <= (n << 1); ++i) insert(i);
	for (int i = 2; i <= tot; ++i) add(nd[i].fail, i);
	dfs(1); printf("%d\n", ans);
} 

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 6ms
memory: 8060kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

score: 0
Accepted
time: 6ms
memory: 8020kb

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

score: 0
Accepted
time: 3ms
memory: 7948kb

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 3ms
memory: 7992kb

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

score: 0
Accepted
time: 3ms
memory: 7996kb

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 0
Accepted
time: 6ms
memory: 7948kb

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

score: 0
Accepted
time: 6ms
memory: 8020kb

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 104ms
memory: 316400kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: 0
Accepted
time: 453ms
memory: 923688kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

890701718

result:

ok 1 number(s): "890701718"

Test #10:

score: 0
Accepted
time: 146ms
memory: 247728kb

input:

3000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

224009870

result:

ok 1 number(s): "224009870"

Test #11:

score: 0
Accepted
time: 369ms
memory: 783140kb

input:

3000000
8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989...

output:

51985943

result:

ok 1 number(s): "51985943"

Test #12:

score: 0
Accepted
time: 414ms
memory: 736376kb

input:

3000000
1911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911...

output:

355676465

result:

ok 1 number(s): "355676465"

Test #13:

score: 0
Accepted
time: 248ms
memory: 491732kb

input:

3000000
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777...

output:

788510374

result:

ok 1 number(s): "788510374"

Test #14:

score: 0
Accepted
time: 260ms
memory: 463864kb

input:

3000000
5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555...

output:

691884476

result:

ok 1 number(s): "691884476"

Test #15:

score: 0
Accepted
time: 579ms
memory: 257112kb

input:

3000000
0990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990...

output:

701050848

result:

ok 1 number(s): "701050848"

Test #16:

score: 0
Accepted
time: 187ms
memory: 85052kb

input:

3000000
2772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772...

output:

486861605

result:

ok 1 number(s): "486861605"

Test #17:

score: 0
Accepted
time: 677ms
memory: 393976kb

input:

3000000
4554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554...

output:

450625621

result:

ok 1 number(s): "450625621"

Test #18:

score: 0
Accepted
time: 635ms
memory: 380832kb

input:

3000000
1181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181...

output:

649551870

result:

ok 1 number(s): "649551870"

Extra Test:

score: 0
Extra Test Passed