写了个Manacher,为啥样例都过不了?

P3501 [POI2010] ANT-Antisymmetry

@[红黑树](/user/413140) @[owo_ImposterAnYu_owo](/user/510555) @[int524288](/user/545645)
by ChickyHas @ 2022-07-24 11:07:39


没人在吗? @[胖头鱼教练](/user/64302) 胖老师救救我
by ChickyHas @ 2022-07-24 12:05:51


@[黑白小弈星](/user/307211) 我不会![](//图.tk/0)
by ImposterAnYu @ 2022-07-24 21:42:34


az
by ChickyHas @ 2022-07-24 23:34:43


写成这样,有了80pts ```cpp #include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; string _s, s; int n, len[N * 2]; long long ans; void E() { n = _s.size() * 2 + 1; s = string(n, ' '); for (int i = 0; i < n; ++i) { s[i] = i & 1 ? _s[i / 2] : '#'; } } char T(char c) { if (c == '1') { return '0'; } if (c == '0') { return '1'; } return c; } void C() { for (int k = 0, i = 0, j = 0; k < n; k += 2) { len[k] = (k < j ? min(j - k, len[2 * i - k]) : 1); while (s[k + len[k]] == T(s[k - len[k]])) { len[k]++; } if (len[k] + k > j) { j = len[k] + k, i = k; } ans += len[k] >> 1; } } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> _s; E(), C(); cout << ans; return 0; } ```
by ChickyHas @ 2022-07-25 07:51:42


|