QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#486935#4057. 子串统计Williamxzh25 172ms223772kbC++232.1kb2024-07-22 12:40:082024-07-22 12:40:09

Judging History

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

  • [2024-07-22 12:40:09]
  • 评测
  • 测评结果:25
  • 用时:172ms
  • 内存:223772kb
  • [2024-07-22 12:40:08]
  • 提交

answer

#include <bits/stdc++.h>
#define il inline
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll mod=998244353;const ull mul=131;
const int N=1e5+5,M=5005;
int n,sa[N],rk[N],height[N];char s[N];ull h[N],pw[N];ll ans,f[M][M],p[N];
il ull get(int l,int r){return h[r]-h[l-1]*pw[r-l+1];}
il int cmp(int x,int y){
	int l=0,r=min(n-x+1,n-y+1),mid,ret=0;
	while(l<=r){
		mid=(l+r)>>1;
		if(get(x,x+mid-1)==get(y,y+mid-1)) ret=mid,l=mid+1;
		else r=mid-1;
	}if(x+ret<=n && y+ret<=n) return s[x+ret]<s[y+ret];
	return x+ret>n;
}
int c[M][M],a[N],m,b[N],k;
int cc[N][101];ll ff[N][101];
int x,y,z;
int main(){
	//freopen("ex_substring3.in","r",stdin);
	scanf("%s",s+1);n=strlen(s+1);pw[0]=1ull;
	for(int i=1;i<=n;++i) pw[i]=pw[i-1]*mul,h[i]=h[i-1]*mul+s[i],sa[i]=i;
	stable_sort(sa+1,sa+1+n,cmp); 
	for(int i=1;i<=n;++i) rk[sa[i]]=i;
	for(int i=1,k=0;i<=n;++i){
		if(rk[i]==1) continue;
		if(k) --k;
		while(i+k<=n && sa[rk[i]-1]+k<=n && s[i+k]==s[sa[rk[i]-1]+k]) ++k;
		height[rk[i]-1]=k;
	}
	if(n<=5000){
		for(int i=1;i<=n;++i){
			x=y=rk[i];
			while(x>1 && height[x-1]>=n-i+1) --x;
			while(y<n && height[y]>=n-i+1) ++y;
			c[i][n]=y-x+1;
			for(int j=n-1;j>=i;--j){
				while(x>1 && height[x-1]>=j-i+1) --x;
				while(y<n && height[y]>=j-i+1) ++y;
				c[i][j]=y-x+1;
			}
		}
		f[1][n]=1ll;
		for(int len=n-1;len;--len)
			for(int i=1,j=len;j<=n;++i,++j)
				f[i][j]=(f[i-1][j]+f[i][j+1])*c[i][j]%mod;
		for(int i=1;i<=n;++i) ans+=f[i][i];
		printf("%lld",ans%mod);
		exit(0);
	}
	for(int i=1;i<=n;++i){
		x=y=rk[i],z=min(100,n-i+1);
		while(x>1 && height[x-1]>=z) --x;
		while(y<n && height[y]>=z) ++y;
		cc[i][i+z-1]=y-x+1;
		for(int j=i+z-2;j>=i;--j){
			while(x>1 && height[x-1]>=j-i+1) --x;
			while(y<n && height[y]>=j-i+1) ++y;
			cc[i][j]=y-x+1;
		}
	}
	p[0]=1ll;
	for(int i=1;i<=n;++i) p[i]=(p[i-1]*2ll)%mod;
	for(int i=1;i+99<=n;++i) ff[i][100]=p[min(i-1,n-(i+99))];
	for(int len=99;len;--len)
		for(int i=1,j=len;j<=n;++i,++j)
			ff[i][len]=(ff[i-1][len+1]+ff[i][len+1])*cc[i][len]%mod;
	for(int i=1;i<=n;++i) ans+=ff[i][i];
	printf("%lld",ans%mod);
	return 0;
}

详细

Test #1:

score: 5
Accepted
time: 136ms
memory: 222960kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

842068617

result:

ok 1 number(s): "842068617"

Test #2:

score: 5
Accepted
time: 172ms
memory: 221824kb

input:

zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:

670446466

result:

ok 1 number(s): "670446466"

Test #3:

score: 5
Accepted
time: 147ms
memory: 223772kb

input:

dedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedkdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedldedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedh...

output:

736895071

result:

ok 1 number(s): "736895071"

Test #4:

score: 5
Accepted
time: 147ms
memory: 222880kb

input:

zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:

670446466

result:

ok 1 number(s): "670446466"

Test #5:

score: 5
Accepted
time: 139ms
memory: 222300kb

input:

kkhjihjjhhjhhikjjkijjjkkikjkjkjjkhjhjhhjijkhjkkkjijikhjhkkhkjhhijiijjjhkiiiikkjjhhkkjjijijkihkijihhikjkjkikikkkkkijjihjkkhiihkjkkkhkihkhhhjhjkihkhjjkikjkjhkhhjhhjiihiiiijiihjkhhihjhjjhjkiikiikhjihhkkjikijkjijjhkjijhihhihkhkjjkjjkkkhjhikkikikikkhijiiijjikiijihhkkjjjhikkjjkkkihjikihhikjijhkijkkiikhhik...

output:

500378111

result:

ok 1 number(s): "500378111"

Test #6:

score: 0
Time Limit Exceeded

input:

babbbbaabbabbaabaaaababaaaaababbbbbabbaaabbabbaaaaabbababbbaabaaaababbaaaaaababbbaaabbabbaaaabaaabaaababaababaabbbbababbaaaabaabbaabbaaaaabbbbababaabbabbaaaaababbabaabaabaaabaabbaaababbbabbbbbbaabbbabbababbbabaabbaaabaabababbabbbbbaaabbbaabbaaabaaababababaaababbbbbabbbbbaaabaaaaaaabaabbbabababbaabaa...

output:


result:


Test #7:

score: 0
Time Limit Exceeded

input:

abababbbbbbababaaabbbabbabababaabaabbbaabbbabbbbbababaaaaabaabbbabbbabbaabbaabbbbbbabbaabbabbabaabbbbabbbbaabaabbbbaababbbaaabbbaabaabbbaabaaabbaaaaaabbbbbbaaaabbaaaabaabbabbbbbbaaabaababbabaabaabaabbbbbaaabbbaababbaababbbaabaabbbbbaabbbaaaabbbabaaaababbaabbababaaababbbbbbbbbbbbaabbabbabaaaaaaaaaaaa...

output:


result:


Test #8:

score: 0
Time Limit Exceeded

input:

aaaabbbabbaabbbbbabbabbbbabbbabbaabbbaaabbaabababbababbaabaabbbbbaabbababbbbbababbaabbaaaabbbbbaababbbbbaaaaabbbbaababbbabaaaabbbbaabaaaaaaaabaabaabaabbaaaababaaaaabbbaabaaababaaaababaabbbbabaabaaaaaababbaaaabbaaabbbbaaababababbaababbaabbabbbabbbabbaabbbbabbabaababbbbbaaaaababbabaaaaaaabbbabaabaaaaa...

output:


result:


Test #9:

score: 0
Time Limit Exceeded

input:

zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

jhkhhjhkkhjikkkjiiikjikjijijjiihkkkjiiihijiiikhhkiikiijikkjkhjhhkkihkkhjikhiikkhkkkhjhiijhkihkhjkjhkjkhhkjjjjhiiikkkihhikiijikhjjjijijjhkjjihhjikkkkkijijihhjjkihikjikijjijjikihjjhiiikhhihjjjhjhhijiiijikkihkjjkjihkjjkhkijjjiihhikkhjhjkikhikhjjkkkjhhiihiiihhkhjiikjjkjjkkijkijjkikhhkjhjhhhkjikkkhjiikhh...

output:


result:


Test #11:

score: 0
Time Limit Exceeded

input:

xyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyxxyyxxyxyxyyxxyyxxyxyyxxyxyxyyx...

output:


result:


Test #12:

score: 0
Time Limit Exceeded

input:

xyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyyxxyxyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxyyxxyxyyxxyxyyxxyxyyxxyyxxyxyyxxy...

output:


result:


Test #13:

score: 0
Time Limit Exceeded

input:

xgltlxgflxglnaflbelxgbgfqltsxgltlxgflxglnaflxglqfjxglflxgflxglfgrglflulnaflbelxgbgfqltsxgltlxgflxgldglnaflxglqfjxglflxgflxglfgryglflulnaflbelxgbgfqltsxgltlxgfligfqltsxgltlxgflxglnaflxglqfjxglflxaxgltlxgflxglnaflbelxgbgfqltsxgltlxgflxglnaflxglqfjxglflxgflxglfgrglflulnaflbelxgbgfqltsxgltlxgflxgldglnaf...

output:


result:


Test #14:

score: 0
Time Limit Exceeded

input:

zszsszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:


result:


Test #15:

score: 0
Time Limit Exceeded

input:

ijjijiijjiijijjijiiiijjiijjijiijjiijijjiijjijiijijjijiijjiijijjijiijijjiijjijiijijjijiijjiijijjiijjijiijjiijijjijiijijjiijjijiijjiijijjiijjijiijijjijiijjiijijjiijjijiijjiijijjijiijijjiijjijiijijjijiijjiijijjijiijijjiijjijiijjiijijjiijjijiijijjijiijjiijijjijiijijjiijjijiijijjijiijjiijijjiijjijiijjiij...

output:


result:


Test #16:

score: 0
Time Limit Exceeded

input:

khkjkjkjjkkihikjijiikjkhhkjhikkjihkijihkikiihjikhhiikhhjjkjhhijjhihhkhjkkhijjiikjjikkijkkijhhhijijiijkjijhjihhhikikhjihhjjikkijkhkjjjihjjikjihkhhikijjihjhkjhjjjhjhhhiiijikhjkjikkijhiijhkkikhjhihhikhjhjkihhkhhihhjjhhiiihjiijhjkhhkjkjikjkikikjjjhiikijijiijkijjihjjhhikiiihkihhjkjjhjjikhjkjjkhjkijhkhjjk...

output:


result:


Test #17:

score: 0
Time Limit Exceeded

input:

ghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghghgh...

output:


result:


Test #18:

score: 0
Time Limit Exceeded

input:

xyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxyxxyxxyxxyxyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxyxxyxxyxxyxyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxxyxyxxyxyxxyxxyxyxxyxxyxxyxyxxyxyxxyxx...

output:


result:


Test #19:

score: 0
Time Limit Exceeded

input:

tgndlgndjrgxtgndjtgndlgxtgngunmxjgxtkdjtgndlgndjtgndlgxtgjgndlgxjgxtgndlgxtgngunmxjgxtgndjtgndlgxtgngunmxjgxtkdjtgndlgndjtgndlgxtgngundndjtgndlgxtgngunmxjgxtkdjtgndljtkdjtgndlgndjtgndlgxtgjgndxjtgndlgxtgngunyndjtgndlgxtgngunmxjgxtkdjtgndlgndjtgndlgxtgjgndlgxdlgxjgxtgndlgxtgngunmxjgxtgndjtgndlgxtgngu...

output:


result:


Test #20:

score: 0
Time Limit Exceeded

input:

jihihiikhkkkjikjhijkijkjiiihhjhikjhkijiiihjjhjjjikkkikihjkhhkjjhijkiikkkjiijikjkkhiihikijjkhikiikkjjhkikjjjjhkhjikihiihkijkhjhkkjjhjkjkkkhjjkhkihihhhkkkjhkkjhijjhkhijhkijjjikjjkjkhikjjhkkjihkihijhjhkkkhkjjijhjjkhjiihhkkjhhjhjikikijjjkkhiijhjjihkkihikikijhkhikiijkkiiihhjkhihhkkhihiijhkhiiikiijihkijhh...

output:


result: