Submit solution
Points:
0.29 (partial)
Time limit:
1.0s
Memory limit:
256M
Input:
stdin
Output:
stdout
Problem source:
Problem types
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Cho xâu ~S~.
Tìm độ dài của xâu con (liên tiếp) đối xứng dài nhất.
Input
Dòng ~1~: Số nguyên dương ~N \leq 5 \times 10^4~.
Dòng ~2~: Xâu ký tự độ dài ~N~.
Output
1 dòng duy nhất gồm độ dài của xâu con đối xứng dài nhất.
Sample Input
5
abacd
Sample Output
3
Comments
This comment is hidden due to too much negative feedback. Show it anyway.
bài này có ver2 không ạ em code O(n^2) vẫn AC ;-;
This comment is hidden due to too much negative feedback. Show it anyway.
hash + chặt nhị phân
ll Get(ll l, ll r) { return ((HASHS[r] - HASHS[l-1] * POW[r - l + 1] % mod) + mod) % mod; }
ll TAKE(ll l, ll r) { return ((HASHT[r] - HASHT[l-1] * POW[r - l + 1] % mod) + mod) % mod; }
bool good(int m, int szt) { for(int i=1; i + m - 1 <= szt; i++) { if(Get(i, i + m - 1) == TAKE(szt - (i + m - 1) + 1, szt - i + 1)) { return true; } } return false; }
TRYHARD main() { #ifndef ONLINEJUDGE #endif fastbuild int n; cin >> n;
}
hihi
HiHi , dùng manacher đi cho ngầu
ac
ai đó thông não giúp mình đoạn cnp với ạ :((
Tại hàm độ dài max không đơn điệu ý bạn, phải cnp các độ dài chẵn riêng và lẻ riêng Bài này bạn có thể làm bằng manacher, mình thấy dễ hơn, tài liệu thì ở đây: https://vnoi.info/wiki/algo/string/manacher.md
cho mình hỏi tại sao phải chặt nhị phân chẳn lẻ thế ạ
include <bits/stdc++.h>
using namespace std;
const int maxn = 5e4, base = 31, MOD = 1e9+7;
int n, hashx[maxn+1], hashn[maxn+1], p[maxn+1]; string s;
int getHashX(int l, int r) { return (hashx[r] - 1llhashx[l-1]p[r-l+1] + 1llMODMOD)%MOD; }
int getHashN(int l, int r) { return (hashn[n - l + 1] - 1llhashn[n - r]p[r - l + 1] + 1llMODMOD)%MOD; }
bool check_distance(int length) { for (int i = 1; i <= n - length + 1; i++) { if (getHashX(i, i + length - 1) == getHashN(i, i + length - 1)) return true; } return false; }
int bs(int l, int r) { int ans = 1; while (l <= r) { int m = (l+r)/2; bool check = false; if (checkdistance(2*m)) { ans = max(ans, 2*m); l = m + 1; check = true; } if (checkdistance(2m+1)) { ans = max(ans, 2m+1); l = m + 1; check = true; } if (!check) r = m - 1; } return ans; }
int main() { iosbase::syncwith_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin.ignore(); getline(cin, s); s = ' ' + s; p[0] = 1, hashx[0] = 0, hashn[0] = 0; for (int i = 1; i <= maxn; i++) p[i] = 1llp[i-1]base%MOD; for (int i = 1; i <= n; i++) { hashx[i] = (1llhashx[i-1]base + s[i] - 'a' + 1)%MOD; hashn[i] = (1llhashn[i-1]base + s[n-i+1] - 'a' + 1)%MOD; } cout << bs(1, n/2); }
không cần chia ra vẫn AC nhé :>>>
orz
https://discord.com/channels/660930260405190688/1107185065370337320/1107269792672534569
Hash base 31 AC được nè :V
Code kiểu j v :>>
This comment is hidden due to too much negative feedback. Show it anyway.
This comment is hidden due to too much negative feedback. Show it anyway.
Tại sao lại k nhỉ
This comment is hidden due to too much negative feedback. Show it anyway.
This comment is hidden due to too much negative feedback. Show it anyway.
Cảm ơn bạn PPAP_1264589 đã đóng góp 3 test khá mạnh cho bộ test của bài này <3. Mình đã rejudge lại toàn bộ submission AC và lần này không chỉ có một vài mà lên đến khoảng 70 submissions đã mất AC :(.
This comment is hidden due to too much negative feedback. Show it anyway.
Mình vừa thêm 1 test do bạn manhtranVN đóng góp, và có vài submission đã mất AC.