Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define nl "\n"
- void files(){
- ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #endif
- }
- struct Hash{
- const static int mod = 1e9 + 7,p1 = 31,p2 = 37;
- int n;
- vector<int> h1,h2,pw1,pw2;
- Hash(string &s){
- n = s.size();
- h1 = vector<int>(n + 1,0),h2 = vector<int>(n + 1,0);
- pw1 = vector<int>(n + 1,1),pw2 = vector<int>(n + 1,1);
- for(int i = 1; i <= n; i++){
- h1[i] = (1LL * h1[i - 1] * p1 + s[i - 1]) % mod;
- h2[i] = (1LL * h2[i - 1] * p2 + s[i - 1]) % mod;
- pw1[i] = 1LL * pw1[i - 1] * p1 % mod;
- pw2[i] = 1LL * pw2[i - 1] * p2 % mod;
- }
- }
- pair<int,int> get(int l,int r){
- int a = (h1[r] - 1LL * h1[l - 1] * pw1[r - l + 1] % mod + mod) % mod;
- int b = (h2[r] - 1LL * h2[l - 1] * pw2[r - l + 1] % mod + mod) % mod;
- return {a,b};
- }
- };
- void solve(){
- int n; cin>>n;
- string s; cin>>s;
- string t = s;
- reverse(t.begin(),t.end());
- Hash h1(s),h2(t);
- int ans = 0;
- int res = 1;
- int l = 0, r = n;
- while(l<=r){
- int m = (l + r) / 2;
- bool ok = false;
- for(int i = m+1; i+m <= n and i-m>=1; i++){
- int left = i-m,right = i+m;
- auto a = h1.get(left,right);
- auto b = h2.get(n-right+1,n-left+1);
- if(a == b){
- ok = true;
- break;
- }
- }
- if(ok){
- ans = m;
- res = max(res,2*ans+1);
- l = m + 1;
- }else r = m - 1;
- }
- l = 0, r = n, ans = 0;
- while(l<=r){
- int m = (l + r) / 2;
- bool ok = false;
- for(int i = m+1; i+m < n and i-m>=1; i++){
- int left = i-m,right = i+m+1;
- // cout<<left<<" "<<right<<' '<<m<<nl;
- auto a = h1.get(left,right);
- auto b = h2.get(n-right+1,n-left+1);
- if(a == b){
- ok = true;
- break;
- }
- }
- if(ok){
- ans = m;
- res = max(res,2*ans+2);
- l = m + 1;
- }else r = m - 1;
- }
- cout<<res<<nl;
- }
- int main(){
- files();
- int t = 1;
- // cin>>t;
- while(t--) solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement