QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#563055 | #7876. Cyclic Substrings | Arvin | WA | 111ms | 694820kb | C++20 | 1.7kb | 2024-09-14 01:14:06 | 2024-09-14 01:14:06 |
Judging History
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;
}
詳細信息
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'