QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#504973 | #7876. Cyclic Substrings | fansizhe | WA | 16ms | 114528kb | C++20 | 787b | 2024-08-04 17:57:52 | 2024-08-04 17:57:53 |
Judging History
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'