QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#504973#7876. Cyclic SubstringsfansizheWA 16ms114528kbC++20787b2024-08-04 17:57:522024-08-04 17:57:53

Judging History

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

  • [2024-08-04 17:57:53]
  • 评测
  • 测评结果:WA
  • 用时:16ms
  • 内存:114528kb
  • [2024-08-04 17:57:52]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
char s[6000005];
int ch[6000005][10],fail[6000005],len[6000005],tot=1;
int num[6000005];
int getfail(int x,int i){
	while(i-len[x]-1<=0||s[i-len[x]-1]!=s[i])x=fail[x];
	return x;
}
int main(){
	scanf("%d",&n);
	scanf("%s",s+1);
	for(int i=1;i<=n;i++)s[i+n]=s[i];
	len[1]=-1,fail[0]=1;int now=0;
	for(int i=1;i<=2*n;i++){
		now=getfail(now,i);
		if(!ch[now][s[i]-'0']){
			fail[++tot]=ch[getfail(fail[now],i)][s[i]-'0'];
			ch[now][s[i]-'0']=tot;
			len[tot]=len[now]+2;
		}
		now=ch[now][s[i]-'0'];
		if(i>n)num[now]++;
	}
	for(int i=tot;i>=2;i--)num[fail[i]]+=num[i];
	ll ans=0;
	for(int i=2;i<=tot;i++)if(len[i]<=n)ans+=1ll*len[i]*num[i]*num[i];
	printf("%lld\n",ans);
	return 0;
}

详细

Test #1:

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

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

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

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

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

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

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

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

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

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

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

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

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

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: -100
Wrong Answer
time: 16ms
memory: 114528kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

1501882102603448320

result:

wrong answer 1st numbers differ - expected: '496166704', found: '1501882102603448320'