QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#278150#7876. Cyclic SubstringsCryingWA 71ms314284kbC++171.2kb2023-12-07 13:08:092023-12-07 13:08:10

Judging History

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

  • [2023-12-07 13:08:10]
  • 评测
  • 测评结果:WA
  • 用时:71ms
  • 内存:314284kb
  • [2023-12-07 13:08:09]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN = 6e6+10,mod = 998244353;

char s[MAXN];
int n,fail[MAXN],len[MAXN],ch[MAXN][10],cnt[MAXN],tot;

ll ans;

int main(){
	ios::sync_with_stdio(false);cin.tie(0);

	cin>>n>>(s+1);
	rep(i,1,n)s[n+i] = s[i];

	tot = 1;len[1] = -1;fail[0] = 1;

	s[0]='#';

	int u = 0;
	rep(i,1,2*n){
		int c = s[i]-'0';
		int tmp = u;
		while(s[i-1-len[tmp]] != s[i])tmp = fail[tmp];
		if(!ch[tmp][c]){
			len[++tot] = len[tmp]+2;
			int tmp2=fail[tmp];
			while(s[i-1-len[tmp2]] != s[i])tmp2 = fail[tmp2];
			fail[tot] = ch[tmp2][c];
			ch[tmp][c] = tot;
		}

		u = ch[tmp][c];
		
		if(i>n)cnt[u]++;
	}

	per(i,tot,0)if(i!=1)cnt[fail[i]]+=cnt[i];

	rep(i,2,tot)if(len[i] <= n){
		ans += 1ll*cnt[i]*cnt[i]*len[i];
		ans%=mod;
	}
	cout<<ans<<endl;

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

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

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

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

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

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

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

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

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

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

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

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

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 34ms
memory: 115476kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: -100
Wrong Answer
time: 71ms
memory: 314284kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

887057785

result:

wrong answer 1st numbers differ - expected: '890701718', found: '887057785'