QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#646970 | #7876. Cyclic Substrings | SGColin | WA | 31ms | 114584kb | C++17 | 2.0kb | 2024-10-17 10:38:10 | 2024-10-17 10:38:10 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define eb emplace_back
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
const int N = 2000001;
const int mod = 998244353;
int n, ans = 0;
struct Palindromic_AutoMaton {
vector<int> str;
int nxt[N][10], fail[N], len[N];
int num[N], last, tot;
void clear() {
len[1] = -1; fail[1] = 0;
len[0] = 0; fail[0] = 1;
str.clear(); str.eb(-1);
last = 0; tot = 1;
memset(nxt[0], 0, sizeof(nxt[0]));
memset(nxt[1], 0, sizeof(nxt[1]));
}
Palindromic_AutoMaton(){clear();}
int newnode(int _len) {
len[++tot] = _len;
fail[tot] = num[tot] = 0;
memset(nxt[tot], 0, sizeof(nxt[tot]));
return tot;
}
int get_fail(int u) {
int strlen = str.size() - 1;
while (str[strlen - len[u] - 1] != str[strlen]) u = fail[u];
return u;
}
void append(int ch, int w) {
str.emplace_back(ch);
int fat = get_fail(last);
if (!nxt[fat][ch]) {
int cur = newnode(len[fat] + 2);
fail[cur] = nxt[get_fail(fail[fat])][ch];
nxt[fat][ch] = cur;
}
last = nxt[fat][ch];
num[last] += w;
}
void append(string &s, int w) {
for (auto &ch : s) append(ch - '0', w);
}
// void add(string &s) {
// last = 0;
// append(s);
// }
void get_num() {
per(u, tot, 2) num[fail[u]] += num[u];
num[0] = num[1] = 0;
}
void calc() {
rep(u, 2, tot) if (len[u] <= n) {
int w = 1ll * num[u] * num[u] % mod * len[u] % mod;
ans = (ans + w) % mod;
}
}
} pam;
int main() {
cin.tie(0);
ios::sync_with_stdio();
cin >> n;
string s; cin >> s;
pam.append(s, 0);
pam.append(s, 1);
pam.get_num();
pam.calc();
cout << ans;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 9688kb
input:
5 01010
output:
39
result:
ok 1 number(s): "39"
Test #2:
score: 0
Accepted
time: 1ms
memory: 9632kb
input:
8 66776677
output:
192
result:
ok 1 number(s): "192"
Test #3:
score: 0
Accepted
time: 0ms
memory: 9740kb
input:
1 1
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 1ms
memory: 9744kb
input:
2 22
output:
12
result:
ok 1 number(s): "12"
Test #5:
score: 0
Accepted
time: 1ms
memory: 9748kb
input:
2 21
output:
2
result:
ok 1 number(s): "2"
Test #6:
score: 0
Accepted
time: 1ms
memory: 9744kb
input:
3 233
output:
10
result:
ok 1 number(s): "10"
Test #7:
score: 0
Accepted
time: 1ms
memory: 9748kb
input:
3 666
output:
54
result:
ok 1 number(s): "54"
Test #8:
score: -100
Wrong Answer
time: 31ms
memory: 114584kb
input:
1000000 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...
output:
411249645
result:
wrong answer 1st numbers differ - expected: '496166704', found: '411249645'