QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#707921 | #4375. String | hejinming983282# | AC ✓ | 247ms | 102004kb | C++23 | 2.0kb | 2024-11-03 18:10:54 | 2024-11-03 18:10:55 |
Judging History
answer
// Author : hejinming2012
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define dbg(x) cout << #x " = " << (x) << endl
#define quickio ios::sync_with_stdio(false);
#define quickin cin.tie(0);
#define quickout cout.tie(0);
#define maxn 1000005
#define mod 998244353
using namespace std;
inline int read() {
int now = 0, nev = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') nev = -1; c = getchar(); }
while(c >= '0' && c <= '9') { now = (now << 1) + (now << 3) + (c & 15); c = getchar(); }
return now * nev;
}
void write(int x) {
if(x < 0) putchar('-'), x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
vector <int> G[maxn], dfs;
int n, k, ans, L, R, siz;
int s[maxn], st[maxn], cur[maxn];
int cnt[maxn], pmt[maxn];
char S[maxn];
signed main() {
quickio
quickin
quickout
int T = read();
while(T--) {
scanf("%s%lld", S + 1, &k);
n = strlen(S + 1), L = 1, R = 0;
int p = 0; ans = 1;
for(int i = 0; i <= n; i++)
G[i].clear();
for(int i = 0; i <= k; i++)
cnt[i] = 0;
G[0].push_back(1);
for(int i = 2; i <= n; i++) {
while(p && S[p + 1] != S[i]) p = pmt[p];
if(S[p + 1] == S[i]) p++;
pmt[i] = p, G[pmt[i]].push_back(i);
}
dfs.clear(), dfs.push_back(0), siz = 1;
while(siz) {
int u = dfs.back();
if(!st[u]) {
cur[u] = L, s[++R] = u, cnt[2 * u % k]++;
while(L <= R && 2 * s[L] <= u) cnt[2 * s[L] % k]--, L++;
ans = ans * (cnt[u % k] + 1) % mod;
for(auto v : G[u]) dfs.push_back(v), siz++;
st[u] ^= 1;
} else {
while(L > cur[u]) L--, cnt[2 * s[L] % k]++;
R--, cnt[2 * u % k]--;
dfs.pop_back(), siz--;
st[u] ^= 1;
}
}
write(ans), putchar(10);
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 247ms
memory: 102004kb
input:
10 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk...
output:
811844748 106557744 583082277 750875845 539889742 198008691 286657978 344446711 612851418 36100066
result:
ok 10 lines