QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#486937#4057. 子串统计Williamxzh25 155ms224960kbC++232.7kb2024-07-22 13:07:482024-07-22 13:07:48

Judging History

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

  • [2024-07-22 13:07:48]
  • 评测
  • 测评结果:25
  • 用时:155ms
  • 内存:224960kb
  • [2024-07-22 13:07:48]
  • 提交

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,oo=1e9;
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],st[N][20],lg[N];ll ff[N][101];
il int getmi(int l,int r){
	if(l>r) return oo;
	int k=lg[r-l+1];
	return min(st[l][k],st[r-(1<<k)+1][k]);
}
il int get1(int x,int v){
	int l=1,r=x,mid,ret=0;
	while(l<=r){
		mid=(l+r)>>1;
		if(getmi(mid,x-1)>=v) ret=mid,r=mid-1;
		else l=mid+1;
	}return ret?ret:x;
}
il int get2(int x,int v){
	int l=x,r=n-1,mid,ret=0;
	while(l<=r){
		mid=(l+r)>>1;
		if(getmi(x,mid-1)>=v) ret=mid,l=mid+1;
		else r=mid-1;
	}return ret?x:ret;
}
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=2;i<=n;++i) lg[i]=lg[i>>1]+1;
	for(int i=1;i<n;++i) st[i][0]=height[i];
	for(int j=1;(1<<j)<n;++j)
		for(int i=1;i+(1<<j)-1<=n;++i)
			st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	for(int i=1;i<=n;++i){
		z=min(100,n-i+1);
		for(int j=i+z-1;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]=get2(rk[i],j-i+1)-get1(rk[i],j-i+1)+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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 5
Accepted
time: 155ms
memory: 223724kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

842068617

result:

ok 1 number(s): "842068617"

Test #2:

score: 5
Accepted
time: 133ms
memory: 222280kb

input:

zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:

670446466

result:

ok 1 number(s): "670446466"

Test #3:

score: 5
Accepted
time: 138ms
memory: 224912kb

input:

dedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedkdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedldedfdedgdedfdedhdedfdedgdedfdedidedfdedgdedfdedhdedfdedgdedfdedjdedfdedgdedfdedh...

output:

736895071

result:

ok 1 number(s): "736895071"

Test #4:

score: 5
Accepted
time: 134ms
memory: 224960kb

input:

zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszz...

output:

670446466

result:

ok 1 number(s): "670446466"

Test #5:

score: 5
Accepted
time: 142ms
memory: 222772kb

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: