QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#802846 | #1455. String Algorithm | cwfxlh | TL | 12443ms | 20920kb | C++14 | 2.0kb | 2024-12-07 14:54:37 | 2024-12-07 14:54:41 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,sa[500003],x[500003],y[500003],ht[500003],tot,zfj,cnt[500003],lg[500003],ST[500003][23];
ll ans;
string s;
int LCP(int xx,int yy){
if(xx==yy)return n-xx+1;
xx=x[xx];
yy=x[yy];
if(xx>yy)swap(xx,yy);
return min(ST[xx+1][lg[yy-xx]],ST[yy-(1<<lg[yy-xx])+1][lg[yy-xx]]);
}
int stk[500003];
bool chk(int l1,int r1,int l2,int r2){
if(r1-l1+1!=r2-l2+1)return false;
int uu=LCP(l1,l2);
if(uu>=r1-l1+1)return true;
l1+=uu+1;
l2+=uu+1;
if(l1>r1)return true;
return (LCP(l1,l2)>=r1-l1+1);
}
bool comp(int X,int Y){return x[X]<x[Y];}
int main(){
ios::sync_with_stdio(false);
cin>>n>>s;
for(int i=2;i<=500000;i++)lg[i]=lg[i>>1]+1;
zfj=max(n,300);
for(int i=1;i<=n;i++)cnt[x[i]=s[i-1]]++;
for(int i=1;i<=zfj;i++)cnt[i]+=cnt[i-1];
for(int i=n;i;i--)sa[cnt[x[i]]--]=i;
for(int k=1;k<=n;k<<=1){
tot=0;
for(int i=n-k+1;i<=n;i++)y[++tot]=i;
for(int i=1;i<=n;i++)if(sa[i]>k)y[++tot]=sa[i]-k;
for(int i=1;i<=zfj;i++)cnt[i]=0;
for(int i=1;i<=tot;i++)cnt[x[y[i]]]++;
for(int i=1;i<=zfj;i++)cnt[i]+=cnt[i-1];
for(int i=tot;i;i--)sa[cnt[x[y[i]]]--]=y[i];
for(int i=1;i<=tot;i++)swap(x[i],y[i]);
tot=0;
for(int i=1;i<=n;i++){
if(i==1||y[sa[i]]!=y[sa[i-1]]||y[sa[i]+k]!=y[sa[i-1]+k])x[sa[i]]=++tot;
else x[sa[i]]=tot;
}
}
for(int i=1;i<=n;i++)x[sa[i]]=i;
for(int i=1;i<=n;i++){
if(x[i]==1)continue;
if(i==1)ht[x[i]]=0;
else ht[x[i]]=max(ht[x[i-1]]-1,0);
while(i+ht[x[i]]-1<n&&sa[x[i]-1]+ht[x[i]]-1<n&&s[i+ht[x[i]]-1]==s[sa[x[i]-1]+ht[x[i]]-1])ht[x[i]]++;
}
for(int i=1;i<=n;i++)ST[i][0]=ht[i];
for(int i=1;(1<<i)<=n;i++){
for(int j=1;j+(1<<i)-1<=n;j++)ST[j][i]=min(ST[j][i-1],ST[j+(1<<(i-1))][i-1]);
}
cout<<1ll*n*(n-1)/2<<'\n';
for(int i=2;i<=n;i++){
tot=ans=0;
for(int j=1;j+i-1<=n;j+=i)stk[++tot]=j;
sort(stk+1,stk+tot+1,comp);
for(int j=1;j<=tot;j++){
for(int u=j+1;u<=tot;u++)ans+=chk(stk[j],stk[j]+i-1,stk[u],stk[u]+i-1);
}
cout<<ans<<'\n';
}
return 0;
}
/*
11
aaabaaabaaa
*/
詳細信息
Test #1:
score: 100
Accepted
time: 4ms
memory: 15808kb
input:
7 kkekeee
output:
21 2 1 0 0 0 0
result:
ok 7 numbers
Test #2:
score: 0
Accepted
time: 0ms
memory: 15528kb
input:
10 babaiskeke
output:
45 2 0 0 0 0 0 0 0 0
result:
ok 10 numbers
Test #3:
score: 0
Accepted
time: 4ms
memory: 15620kb
input:
11 aaabaaabaaa
output:
55 10 2 1 0 0 0 0 0 0 0
result:
ok 11 numbers
Test #4:
score: 0
Accepted
time: 0ms
memory: 17152kb
input:
50 vgjanpqrpxaqzckoaokxemqghpgeehegwjiqifenfpnttwbibs
output:
1225 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 50 numbers
Test #5:
score: 0
Accepted
time: 0ms
memory: 17132kb
input:
50 sngyxnmwrlyyhrplimxorsrvvllpykxxsuvoupoowyrwfvtwsl
output:
1225 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 50 numbers
Test #6:
score: 0
Accepted
time: 0ms
memory: 17380kb
input:
50 nzpywqxywyyqwmvrrzxvunzvqltovxppyynvylxxlqwwxpxqqs
output:
1225 42 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 50 numbers
Test #7:
score: 0
Accepted
time: 0ms
memory: 17240kb
input:
50 qpytzpzuzryyyywzwvzrzwvzlqvnysuqosxpwzzwysmvwwwysw
output:
1225 52 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 50 numbers
Test #8:
score: 0
Accepted
time: 2ms
memory: 16176kb
input:
500 wxntkuresxqhrfasoqgmzorcehxjcqooxsncdxgetjstfdpxwjihwfpnqbbioztozfegasscvzswwxmttvwgbxrbsbvkhjbmjwvquzxjinlyzoxhqkuflgihcaudnyoghubfykllruerubkcsmdbzsmknmzexkkvzmkxjrurcloufqcutwjknlohowgtwubymizrvjiiqnrbnxrgvoiwheiydxipsryynhmzoawzmyhxwwqizehnvvrgpbntaaggpqolumkjeduxxfxtgdbngmlwjbozgvztsgnndwhm...
output:
124750 2304 67 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
result:
ok 500 numbers
Test #9:
score: 0
Accepted
time: 4ms
memory: 16232kb
input:
500 szylxznqzzpzxwxtzvvrxyvyzytsvzsvswsumqyvzpzzqsywwwzsxutupzuwwuxwpqympzxowyrzwsvzyymzytuwuprkvtxvxwtzwtzxtrttvzwszzstuqtxyzmpoxytwvvyuvszuryyqytozysztrpvmxzzzsxxpjwtryowynsytkyzyzuyslywvvzquvzyzuzxyxnrqtwsvvzuzywtzgzgvznvzxuzvxzxzsyxyszxrjruzuwrzystzzpyqwqxzvytzwxrzysugpwxnyoylxxvxvywmwlywxruxpsu...
output:
124750 5207 325 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
result:
ok 500 numbers
Test #10:
score: 0
Accepted
time: 4ms
memory: 14168kb
input:
500 yzzyzzyyyxzyzxvszxuyzyxxyzwzzuyzzxvxxyyzzxxzwztzzzywxwzzyxzzxzxvzvzyzyxyzyyzzvtwxyvzzzzyyxvzzuvxyyvzyuyyzzwyzzvzztzwzyyzzvyuzzzzyzzzwwxyxzxvyuuzxzyuzzyxxyuyzxxzyzxzxyzvzxzzyyzxxuzyuvzzyszzwyttszzxyxzwzyxzzyztxyzzxzzzzxxxzzxyzvzwwvztywyxuyuzyzxxuyxzvzxzvrywytwuyvtyxxyxxzzyyvuzvvzwyzzzxsywzyzzwwzz...
output:
124750 12361 1779 287 61 14 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 500 numbers
Test #11:
score: 0
Accepted
time: 0ms
memory: 16436kb
input:
500 zzyzzzyzyzyzyxzyzzzyyxzyzzzzzzzzzzxyyzzzzzzzyzzzxyzzzzzzzyyyzzyzxzzyzzzzyzzxzyyzzzzyzwzzzzzyzzzzzzzyzzzzzzzxzzzzzzwzzxyzzzzzzyzzuzyzxzzzyzzxzyzyyzzxzzyyzzzwzyzzyzyzyyzzzzzyzzxyzxzzzzzxzzzwzzyyzzzyyzyxyywzzzzzzzzzyzzzzzzzzzzyzzzzzwzzzyyzyzzyzzzzzyzzzyzzzyzyzzvzzzzzyzzzywzyzzzzzyzzwzzzzyzzyzzzzzzy...
output:
124750 25306 8168 3162 1233 537 219 110 53 18 12 4 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
result:
ok 500 numbers
Test #12:
score: 0
Accepted
time: 16ms
memory: 16080kb
input:
2000 uzvwxzqszxwzwypyuzrzzokzrhzyypytsyzvzxuzvruwyvujvzpvtvuuxuyztxzstsyxxuwwxzuzsyuqxsyznwzuwwxpuuvzqwtxwqrxxvytquyjtrzxuzzwyxzzxuwzrtxntyxwxyzvvstyvzpzsvxuztuzqtzvywtxyzxtxxsxpnzxovyzzyvnrwyxyzznlqywzwkzlnswxuyuvztxywmxxyvyqwxwwszzywxnpvvrtyydrwwwzyvsrzytrzrojqrnvojtzvqnnxvxylsywoztzzwvlvwsvvxrzqv...
output:
1999000 86828 5220 320 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 2000 numbers
Test #13:
score: 0
Accepted
time: 354ms
memory: 18996kb
input:
10000 rhsrvsyyqzsxonvqxxxryzqwuyzypwiqpsvqvwsvvswowuznznpyxzyzyryuypwyuvrsvxyywwszutzqxjpwzyzzysyyzrmztsusyvtpzrmqrzyxqwusswyywtvporwymwxylzvsilxtyzxssvyllrwvzyxuzxpxyzrwyvwurqyzxwviyuzvzfzzstutuxtsxwyywtvzxrxuztiwpwwvzmvxnvxpvoqyxyyyxzmouztvxwryzzyzszrtrwupsvwyyrxszxywzsyozyynzrlxupprnxwyouyuqsuovu...
output:
49995000 2112858 122779 8113 543 52 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 10000 numbers
Test #14:
score: 0
Accepted
time: 12443ms
memory: 20920kb
input:
50000 ixxzzrxyyvxuxjzyssqmrwyzzwzsnsjpvxyzuwvyusyolxtpxzzlvxiuutwrxyxksywsxuttzztxzvkktvrztxzyzrowwzrzxxruzwzxzqvovuuvywwrvtwyuqqyuwyxzxmzzzzxtrsqrvvzyuyyxtztxpxhozyzxmyvyysvupsyyzwuxzvszxzzqzxkwwvyxuvvxtpztzyyxwuywqsosutyqyuwzyqyxtsvvrptxwqwzumsxxznntvrwyzxxzyqstxuxqqvivmswxyrvxzvwztxpwuzuvtryzvmxy...
output:
1249975000 52455909 3024419 197627 13719 1014 75 10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 50000 numbers
Test #15:
score: -100
Time Limit Exceeded
input:
100000 yttwuxxrivtyvxpxpwzsvvtuhuwztxuurzxzwuzxzxuynwqzytsyrvzvzxyzzsyqutvxysuyvvvpvyrvxyxrywxxttqxvgpvjuzwovmqpoxtsrxuozvxwyquvszuyyyxvqxvzwwmyyvrzyyzzfyvtxvtztztzzrvrzyyyxrvsrvpzknytxywxrqsvuvzwzyzzyyyizxyiwpcwsyxytvsyuxvmvxxqwxztywwzyyotwxszoxzquwxzywytvvyozxyjrtuuyvmpyuxsuzryylyyzwysyyqxxgqruuvv...