QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#645475 | #7876. Cyclic Substrings | black_king1 | AC ✓ | 111ms | 343692kb | C++17 | 2.4kb | 2024-10-16 18:36:22 | 2024-10-16 18:36:23 |
Judging History
answer
// Created by calabash_boy on 18-6-4.
// BZOJ 3676
// calc max(len(t)*cnt(t)) t为s回文子串,cnt(t)=t出现次数
#include<bits/stdc++.h>
using namespace std;
const int maxn = 6e6+100;
const long long mod = 998244353;
struct Palindromic_AutoMaton{
//basic
int s[maxn],now;
int nxt[maxn][10],fail[maxn],l[maxn],last,tot;
// extension
int num[maxn];/*节点代表的所有回文串出现次数*/
bool two,flag[maxn];
void clear(){
//1节点:奇数长度root 0节点:偶数长度root
s[0]=l[1]=-1;
two=false;
fail[0] = tot = now =1;
last = l[0]=0;
memset(nxt[0],0,sizeof nxt[0]);
memset(nxt[1],0,sizeof nxt[1]);
memset(flag,0,sizeof(flag));
}
Palindromic_AutoMaton(){clear();}
int newnode(int ll){
tot++;
memset(nxt[tot],0,sizeof nxt[tot]);
fail[tot]=num[tot]=0;
flag[tot]=two;
l[tot]=ll;
return tot;
}
int get_fail(int x){
while (s[now-l[x]-2]!=s[now-1])x = fail[x];
return x;
}
void add(int ch,int w){
s[now++] = ch;
int cur = get_fail(last);
if(!nxt[cur][ch]){
int tt = newnode(l[cur]+2);
fail[tt] = nxt[get_fail(fail[cur])][ch];
nxt[cur][ch] = tt;
}
last = nxt[cur][ch];
num[last]+=w;
}
void build(){
//fail[i]<i,拓扑更新可以单调扫描。
for (int i=tot;i>=2;i--){
num[fail[i]]+=num[i];
}
num[0]=num[1]=0;
}
void init(char* ss,int w){
while (*ss){
add(*ss-'0',w);ss++;
}
}
void init(string str,int w){
for (int i=0;i<str.size();i++){
add(str[i]-'0',w);
}
}
long long query(string s);
}pam;
string s;
long long Palindromic_AutoMaton::query(string s){
long long ret =0;
for (int i=2;i<=tot;i++){
if(l[i]<=s.size()){
long long temp=1ll*num[i]*num[i]%mod;
temp=1ll*temp*l[i]%mod;
ret+=temp;
ret%=mod;
//cout<<ret<<endl;
}
}
return ret;
}
int main(){
int n;scanf("%d",&n);
cin>>s;
pam.init(s,0);
//cout<<s<<endl;
pam.two=true;
pam.init(s,1);
pam.build();
printf("%lld\n",pam.query(s));
return 0;
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 19056kb
input:
5 01010
output:
39
result:
ok 1 number(s): "39"
Test #2:
score: 0
Accepted
time: 3ms
memory: 19068kb
input:
8 66776677
output:
192
result:
ok 1 number(s): "192"
Test #3:
score: 0
Accepted
time: 0ms
memory: 18680kb
input:
1 1
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 19920kb
input:
2 22
output:
12
result:
ok 1 number(s): "12"
Test #5:
score: 0
Accepted
time: 0ms
memory: 19044kb
input:
2 21
output:
2
result:
ok 1 number(s): "2"
Test #6:
score: 0
Accepted
time: 0ms
memory: 19740kb
input:
3 233
output:
10
result:
ok 1 number(s): "10"
Test #7:
score: 0
Accepted
time: 0ms
memory: 19200kb
input:
3 666
output:
54
result:
ok 1 number(s): "54"
Test #8:
score: 0
Accepted
time: 30ms
memory: 129324kb
input:
1000000 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...
output:
496166704
result:
ok 1 number(s): "496166704"
Test #9:
score: 0
Accepted
time: 105ms
memory: 343692kb
input:
3000000 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...
output:
890701718
result:
ok 1 number(s): "890701718"
Test #10:
score: 0
Accepted
time: 93ms
memory: 181020kb
input:
3000000 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...
output:
224009870
result:
ok 1 number(s): "224009870"
Test #11:
score: 0
Accepted
time: 102ms
memory: 342948kb
input:
3000000 8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989...
output:
51985943
result:
ok 1 number(s): "51985943"
Test #12:
score: 0
Accepted
time: 71ms
memory: 343176kb
input:
3000000 1911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911...
output:
355676465
result:
ok 1 number(s): "355676465"
Test #13:
score: 0
Accepted
time: 101ms
memory: 309648kb
input:
3000000 7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777...
output:
788510374
result:
ok 1 number(s): "788510374"
Test #14:
score: 0
Accepted
time: 111ms
memory: 319564kb
input:
3000000 5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555...
output:
691884476
result:
ok 1 number(s): "691884476"
Test #15:
score: 0
Accepted
time: 80ms
memory: 196408kb
input:
3000000 0990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990...
output:
701050848
result:
ok 1 number(s): "701050848"
Test #16:
score: 0
Accepted
time: 68ms
memory: 95452kb
input:
3000000 2772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772...
output:
486861605
result:
ok 1 number(s): "486861605"
Test #17:
score: 0
Accepted
time: 95ms
memory: 299916kb
input:
3000000 4554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554...
output:
450625621
result:
ok 1 number(s): "450625621"
Test #18:
score: 0
Accepted
time: 86ms
memory: 293756kb
input:
3000000 1181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181...
output:
649551870
result:
ok 1 number(s): "649551870"
Extra Test:
score: 0
Extra Test Passed