QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#486935 | #4057. 子串统计 | Williamxzh | 25 | 172ms | 223772kb | C++23 | 2.1kb | 2024-07-22 12:40:08 | 2024-07-22 12:40:09 |
Judging History
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...