QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#563055#7876. Cyclic SubstringsArvinWA 111ms694820kbC++201.7kb2024-09-14 01:14:062024-09-14 01:14:06

Judging History

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

  • [2024-09-14 01:14:06]
  • 评测
  • 测评结果:WA
  • 用时:111ms
  • 内存:694820kb
  • [2024-09-14 01:14:06]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ld long double
#define lll  __int128
#define dhm std::fixed<<std::setprecision
#define prq priority_queue
using ll = long long;
using ull = unsigned long long;
int T;
template <typename T>
using min_heap = priority_queue<T, vector<T>, greater<T>>;
template <typename T>
using max_heap = priority_queue<T, vector<T>, less<T>>;
const int cd = 3e6+10;
struct pam {
	int len[cd];
	int trie[cd][26];
	int fail[cd];
	int pos;
	int tot = 1;
	int num[cd];
	int cur;
	int lst = 0;
	pam() {
		len[1] = -1;
		fail[0] = 1;
	}
	void init(string s) {
		for(int i = 0 ; i < s.size(); i ++) {
			auto getfail = [&](int x,int i)->int {
				while(i-len[x]-1<0||s[i]!=s[i-len[x]-1])x = fail[x];
				return x;
			};
			pos = getfail(cur,i);
			if(!trie[pos][s[i]-'a']) {
				fail[++tot] = trie[getfail(fail[pos],i)][s[i]-'a'];
				trie[pos][s[i]-'a'] = tot;
				len[tot] = len[pos] + 2;
			}
			cur = trie[pos][s[i]-'a'];
			num[cur]++;
		}
	}
}PAM,dbPAM;
const int mod = 998244353;
void solve() {
	int n;
	std::cin>>n;
	string s;
	std::cin>>s;
	PAM.init(s);
	s+=s;
	dbPAM.init(s);
	for(int i = PAM.tot; i >= 2; i --) {
		PAM.num[PAM.fail[i]] += PAM.num[i];
		//std::cout<<PAM.num[i]<<" "<<PAM.len[i]<<endl;
	}
	ll ans = 0;
	for(int i = dbPAM.tot; i >= 2; i --) {
		dbPAM.num[dbPAM.fail[i]] += dbPAM.num[i];
		dbPAM.num[i] -= PAM.num[i];
		if(dbPAM.len[i]<=n)
		ans = (ans + 1ll*dbPAM.len[i]*dbPAM.num[i]%mod*dbPAM.num[i]%mod)%mod;
	}
	std::cout<<ans<<endl;
}
int main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
    T = 1;
	//std::cin>>T;
	while(T --)
	solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 13868kb

input:

5
01010

output:

39

result:

ok 1 number(s): "39"

Test #2:

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

input:

8
66776677

output:

192

result:

ok 1 number(s): "192"

Test #3:

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

input:

1
1

output:

1

result:

ok 1 number(s): "1"

Test #4:

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

input:

2
22

output:

12

result:

ok 1 number(s): "12"

Test #5:

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

input:

2
21

output:

2

result:

ok 1 number(s): "2"

Test #6:

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

input:

3
233

output:

10

result:

ok 1 number(s): "10"

Test #7:

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

input:

3
666

output:

54

result:

ok 1 number(s): "54"

Test #8:

score: 0
Accepted
time: 68ms
memory: 350508kb

input:

1000000
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...

output:

496166704

result:

ok 1 number(s): "496166704"

Test #9:

score: -100
Wrong Answer
time: 111ms
memory: 694820kb

input:

3000000
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

output:

0

result:

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