QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#321509#7876. Cyclic SubstringsEndlineAC ✓304ms528080kbC++142.0kb2024-02-04 20:49:092024-02-04 20:49:09

Judging History

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

  • [2024-02-04 20:49:09]
  • 评测
  • 测评结果:AC
  • 用时:304ms
  • 内存:528080kb
  • [2024-02-04 20:49:09]
  • 提交

answer

/*
 * Author: Endline
 * Time: 2024/02/04 17:25:18
 * File: String-N.cpp
 */
#include<bits/stdc++.h>
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
using ll=long long;
const int MAXN=6000002;
const int mod=998244353;
template<typename _Tp>inline void Add(_Tp&x,int y){x=x+y>=mod?x+y-mod:x+y;}
int n;
string str;
struct PlalindromeAutomaton
{
    int ans;
    string str;
    int pcnt=1,las,ecnt;
    int ch[MAXN][10],fail[MAXN],len[MAXN],cnt[MAXN],head[MAXN],ed[MAXN];
    struct TreeEdge
    {
        int v,nxt;
    }e[MAXN];
    inline void addedge(int u,int v)
    {
        e[++ecnt]={v,head[u]};
        head[u]=ecnt;
    }
    inline int getfail(int p,int id)
    {
        while(id-len[p]-1<1||str[id-len[p]-1]!=str[id])p=fail[p];
        return p;
    }
    inline void extend(int c,int id)
    {
        int p=getfail(las,id);
        if(!ch[p][c])
        {
            pcnt++;
            ed[pcnt]=id;
            fail[pcnt]=ch[getfail(fail[p],id)][c];
            len[pcnt]=len[p]+2;
            ch[p][c]=pcnt;
        }
        if(id>=n+1)cnt[ch[p][c]]++;
        las=ch[p][c];
        return;
    }
    inline void insert(string s)
    {
        str=' '+s;
        for(int i=1;i<=s.size();i++)
            extend(str[i]-'0',i);
        return;
    }
    inline void init()
    {
        fail[0]=1,len[1]=-1;
    }
    void dfs(int u)
    {
        for(int i=head[u];i;i=e[i].nxt)
        {
            int v=e[i].v;
            dfs(v);
            Add(cnt[u],cnt[v]);
        }
    }
    inline int work()
    {
        for(int i=2;i<=pcnt;i++)
            addedge(fail[i],i);
        dfs(0);
        for(int i=2;i<=pcnt;i++)
            if(len[i]<=n)Add(ans,1ll*cnt[i]*cnt[i]%mod*len[i]%mod);
        return ans;
    }
}Pt;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n;
    cin>>str;str=str+str;
    Pt.init();
    Pt.insert(str);
    printf("%d\n",Pt.work());
    return 0;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 14256kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

score: 0
Accepted
time: 2ms
memory: 14000kb

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

score: 0
Accepted
time: 1ms
memory: 14000kb

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 0ms
memory: 13996kb

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

score: 0
Accepted
time: 0ms
memory: 14056kb

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 0
Accepted
time: 2ms
memory: 13988kb

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

score: 0
Accepted
time: 1ms
memory: 13932kb

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 35ms
memory: 188608kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: 0
Accepted
time: 94ms
memory: 528080kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

890701718

result:

ok 1 number(s): "890701718"

Test #10:

score: 0
Accepted
time: 71ms
memory: 213444kb

input:

3000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

224009870

result:

ok 1 number(s): "224009870"

Test #11:

score: 0
Accepted
time: 115ms
memory: 470868kb

input:

3000000
8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989...

output:

51985943

result:

ok 1 number(s): "51985943"

Test #12:

score: 0
Accepted
time: 130ms
memory: 451820kb

input:

3000000
1911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911...

output:

355676465

result:

ok 1 number(s): "355676465"

Test #13:

score: 0
Accepted
time: 63ms
memory: 386804kb

input:

3000000
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777...

output:

788510374

result:

ok 1 number(s): "788510374"

Test #14:

score: 0
Accepted
time: 63ms
memory: 392744kb

input:

3000000
5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555...

output:

691884476

result:

ok 1 number(s): "691884476"

Test #15:

score: 0
Accepted
time: 114ms
memory: 222584kb

input:

3000000
0990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990...

output:

701050848

result:

ok 1 number(s): "701050848"

Test #16:

score: 0
Accepted
time: 59ms
memory: 78724kb

input:

3000000
2772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772...

output:

486861605

result:

ok 1 number(s): "486861605"

Test #17:

score: 0
Accepted
time: 304ms
memory: 347100kb

input:

3000000
4554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554...

output:

450625621

result:

ok 1 number(s): "450625621"

Test #18:

score: 0
Accepted
time: 275ms
memory: 342472kb

input:

3000000
1181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181...

output:

649551870

result:

ok 1 number(s): "649551870"

Extra Test:

score: 0
Extra Test Passed