QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#269224#7876. Cyclic Substringsucup-team2303#AC ✓1020ms927976kbC++141.5kb2023-11-29 14:03:372023-11-29 14:03:39

Judging History

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

  • [2023-11-29 14:03:39]
  • 评测
  • 测评结果:AC
  • 用时:1020ms
  • 内存:927976kb
  • [2023-11-29 14:03:37]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
int a,b,cnt,rt1,rt2,la,d[6200001];
long long v[6200001],an;
int fa[24][6200001];
char s[12000001];
struct p{int t[10],link,len;}l[6200001];
void insert(int qq,int ww)
{
	int tt=la,gg;while(s[ww-l[tt].len-1]!=qq) tt=l[tt].link;gg=tt;
	if(!l[gg].t[qq])
	{
		int nw=++cnt;l[nw].len=l[tt].len+2;
		if(tt!=1){tt=l[tt].link;while(s[ww-l[tt].len-1]!=qq) tt=l[tt].link;}
		l[nw].link=l[tt].t[qq];l[gg].t[qq]=nw;
	}
	v[l[gg].t[qq]]++;
	la=l[gg].t[qq];
}
int main()
{
	scanf("%d",&b);
	a=b;
	scanf("%s",s+1);
	for(int i=a+1;i<=a*2-1;i++) s[i]=s[i-a];
	a=b*2-1;
	rt1=++cnt,rt2=0;l[rt2].link=rt1,l[rt1].len=-1,l[rt1].link=rt2;la=rt2;s[0]=-1;
	for(int i=1;i<=a;i++) s[i]-='0',insert(s[i],i),d[i]=la;
	for(int i=1;i<=cnt;i++) fa[0][i]=l[i].link;
	for(int i=1;i<=cnt;i++)
	{
		for(int j=1;j<=23;j++) fa[j][i]=fa[j-1][fa[j-1][i]];
	}
	for(int i=1;i<=a;i++)
	{
		int tt=d[i],gg=i;
		for(int j=23;j>=0;j--)
		{
			if(fa[j][tt]&&i-l[fa[j][tt]].len+1<=b)
			{
				tt=fa[j][tt];
			}
		}
		if(i-l[tt].len+1>b)
		{
			v[tt]--;continue;
		}
//		cout<<tt<<" "<<d[i]<<" "<<l[d[i]].link<<" "<<v[d[i]]<<"\n";
		v[fa[0][tt]]--;
	}
//	for(int i=1;i<=cnt;i++) cout<<v[i]<<" ";cout<<"\n";
	for(int i=cnt;i>=1;i--)
	{//cout<<i<<" "<<l[i].link<<"\n";
		v[l[i].link]+=v[i];
	}
	for(int i=2;i<=cnt;i++)
	{
		if(l[i].len>b) continue;
//		cout<<v[i]<<" "<<l[i].len<<"\n";
		an=(an+v[i]*l[i].len%mod*v[i]%mod)%mod;
	}
	printf("%lld",(an%mod+mod)%mod);
	return 0;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3672kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

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

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

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

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

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

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

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

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

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

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

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

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 318ms
memory: 310236kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: 0
Accepted
time: 1020ms
memory: 923748kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

890701718

result:

ok 1 number(s): "890701718"

Test #10:

score: 0
Accepted
time: 657ms
memory: 437448kb

input:

3000000
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...

output:

224009870

result:

ok 1 number(s): "224009870"

Test #11:

score: 0
Accepted
time: 953ms
memory: 927412kb

input:

3000000
8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989...

output:

51985943

result:

ok 1 number(s): "51985943"

Test #12:

score: 0
Accepted
time: 887ms
memory: 927976kb

input:

3000000
1911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911911...

output:

355676465

result:

ok 1 number(s): "355676465"

Test #13:

score: 0
Accepted
time: 821ms
memory: 817212kb

input:

3000000
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777...

output:

788510374

result:

ok 1 number(s): "788510374"

Test #14:

score: 0
Accepted
time: 747ms
memory: 850552kb

input:

3000000
5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555...

output:

691884476

result:

ok 1 number(s): "691884476"

Test #15:

score: 0
Accepted
time: 285ms
memory: 482860kb

input:

3000000
0990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990990909909909099090990990909909909099090990990909909099099090990990909909099099090990990909909099099090990909909909099099090990909909909099090990...

output:

701050848

result:

ok 1 number(s): "701050848"

Test #16:

score: 0
Accepted
time: 181ms
memory: 170384kb

input:

3000000
2772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772772727727727277272772772727727727277272772772727727277277272772772727727277277272772772727727277277272772727727727277277272772727727727277272772...

output:

486861605

result:

ok 1 number(s): "486861605"

Test #17:

score: 0
Accepted
time: 346ms
memory: 788940kb

input:

3000000
4554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554554545545545455454554554545545545455454554554545545455455454554554545545455455454554554545545455455454554545545545455455454554545545545455454554...

output:

450625621

result:

ok 1 number(s): "450625621"

Test #18:

score: 0
Accepted
time: 327ms
memory: 770000kb

input:

3000000
1181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181811811818118181181181811818118118181181181811818118118181181181811818118118181181811811818118118181181811811818118181181181811811818118181181181...

output:

649551870

result:

ok 1 number(s): "649551870"

Extra Test:

score: 0
Extra Test Passed