QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#304366#7876. Cyclic Substringsucup-team134#AC ✓267ms643356kbC++142.1kb2024-01-13 18:35:062024-01-13 18:35:07

Judging History

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

  • [2024-01-13 18:35:07]
  • 评测
  • 测评结果:AC
  • 用时:267ms
  • 内存:643356kb
  • [2024-01-13 18:35:06]
  • 提交

answer

#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
typedef long long ll;
using namespace std;
using u128=__uint128_t;
typedef pair<int,int> pii;

const int mod=998244353;
inline int add(int x,int y){int ret=x+y;if(ret>=mod)ret-=mod;return ret;}
inline int sub(int x,int y){int ret=x-y;if(ret<0)ret+=mod;return ret;}
inline int mul(int x,int y){return ((ll)x*y)%mod;}
inline int step(int base,int pw){int ret=1;while(pw){if(pw&1)ret=mul(ret,base);base=mul(base,base);pw>>=1;}return ret;}
inline int invv(int x){return step(x,mod-2);}

const int maxn=6e6+10;
const int maxalp=10;

int link[maxn],trans[maxn][maxalp],last,cnt,sum[maxn],len[maxn];
string s;

void init(){

    memset(trans,-1,sizeof(trans));
    last=1;
    cnt=2;
    link[0]=0;
    link[1]=0;
    len[0]=-1;
    len[1]=0;

}
void append(int pos,int val,int c){

   // printf("%d %d AFA\n",pos,val);

    int curr=last;
    while(1){
        if(pos-len[curr]-1>=0 && s[pos-len[curr]-1]==s[pos])break;
        curr=link[curr];
    }

    int q=trans[curr][c];
    if(q!=-1){
        last=q;
        sum[q]+=val;
        return;
    }

    q=cnt++;
    len[q]=len[curr]+2;
    last=q;
    sum[q]+=val;
    trans[curr][c]=q;

    curr=link[curr];
    while(1){
        if(pos-len[curr]-1>=0 && s[pos-len[curr]-1]==s[pos])break;
        curr=link[curr];
    }

    if(trans[curr][c]==q)link[q]=1;
    else link[q]=trans[curr][c];

}

vector<int>vect[maxn];
int n,cn;
int main(){

    ///freopen("test.txt","r",stdin);

    ///printf("%d ADA\n",sizeof(vect));

    scanf("%d",&n);
    cin>>s;
    s+=s;
    cn=n;
    n*=2;

    init();

    for(int i=0;i<s.size();i++)
        append(i,i>=cn,s[i]-'0');

    for(int i=1;i<cnt;i++){
       /// printf("%d %d AAA\n",link[i],i);
        vect[link[i]].pb(i);
    }

    int rez=0;
    for(int i=cnt-1;i>=2;i--){
        for(int j=0;j<vect[i].size();j++)sum[i]+=sum[vect[i][j]];
        if(len[i]<=cn)rez=add(rez,mul(len[i],mul(sum[i],sum[i])));
    }

    printf("%d\n",rez);

    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 27ms
memory: 383800kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

score: 0
Accepted
time: 11ms
memory: 383564kb

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

score: 0
Accepted
time: 19ms
memory: 384628kb

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 24ms
memory: 383108kb

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

score: 0
Accepted
time: 23ms
memory: 384468kb

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 0
Accepted
time: 20ms
memory: 384280kb

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

score: 0
Accepted
time: 24ms
memory: 384560kb

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 95ms
memory: 473112kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: 0
Accepted
time: 267ms
memory: 642740kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

890701718

result:

ok 1 number(s): "890701718"

Test #10:

score: 0
Accepted
time: 183ms
memory: 453420kb

input:

3000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

224009870

result:

ok 1 number(s): "224009870"

Test #11:

score: 0
Accepted
time: 251ms
memory: 643356kb

input:

3000000
8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989...

output:

51985943

result:

ok 1 number(s): "51985943"

Test #12:

score: 0
Accepted
time: 252ms
memory: 641792kb

input:

3000000
1911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911...

output:

355676465

result:

ok 1 number(s): "355676465"

Test #13:

score: 0
Accepted
time: 243ms
memory: 543076kb

input:

3000000
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777...

output:

788510374

result:

ok 1 number(s): "788510374"

Test #14:

score: 0
Accepted
time: 207ms
memory: 533284kb

input:

3000000
5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555...

output:

691884476

result:

ok 1 number(s): "691884476"

Test #15:

score: 0
Accepted
time: 193ms
memory: 476380kb

input:

3000000
0990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990...

output:

701050848

result:

ok 1 number(s): "701050848"

Test #16:

score: 0
Accepted
time: 108ms
memory: 414924kb

input:

3000000
2772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772...

output:

486861605

result:

ok 1 number(s): "486861605"

Test #17:

score: 0
Accepted
time: 192ms
memory: 522940kb

input:

3000000
4554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554...

output:

450625621

result:

ok 1 number(s): "450625621"

Test #18:

score: 0
Accepted
time: 206ms
memory: 519520kb

input:

3000000
1181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181...

output:

649551870

result:

ok 1 number(s): "649551870"

Extra Test:

score: 0
Extra Test Passed