QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#802846#1455. String AlgorithmcwfxlhTL 12443ms20920kbC++142.0kb2024-12-07 14:54:372024-12-07 14:54:41

Judging History

This is the latest submission verdict.

  • [2024-12-07 14:54:41]
  • Judged
  • Verdict: TL
  • Time: 12443ms
  • Memory: 20920kb
  • [2024-12-07 14:54:37]
  • Submitted

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...

output:


result: