比赛 NOIP2025模拟赛2 评测结果 AAAAAAAAAAAAAAAA
题目名称 回文块 最终得分 100
用户昵称 淮淮清子 运行时间 0.732 s
代码语言 C++ 内存使用 44.08 MiB
提交时间 2025-11-25 08:47:49
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ull unsigned long long
const int MAXN = 5 * 1e6 + 10;
const ull BASE = 131;
ull h[MAXN], powe[MAXN];

void init(){
    powe[0] = 1;
    for(int i = 1;i < MAXN;++ i) powe[i] = powe[i - 1] * BASE;
}

int main(){
    freopen("palin.in", "r", stdin);
    freopen("palin.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    init();
    int T; cin >> T;
    while(T --){
        string s; cin >> s;
        int n = s.size(), ans = 0;
        h[0] = 0;
        for(int i = 1;i <= n;++ i) h[i] = h[i - 1] * BASE + s[i - 1];
        int l = 1, r = n;
        while(l <= r){
            bool ok = 0;
            int mid = (r - l + 1) / 2;
            for(int len = 1;len <= mid;++ len){
                ull h1 = h[l + len - 1] - h[l -  1] * powe[len];
                ull h2 = h[r] - h[r - len] * powe[len];
                if(h1 == h2){
                    ans += 2;
                    l += len; r -= len;
                    ok = 1; break;
                }
            }
            if(!ok){
                ans++; break;
            }
        }
        cout << ans << '\n';
    }
    return 0;
}