AT_abc398_f [ABC398F] ABCBA 题解

考虑对 \(s\) 正反各做一遍哈希,记为 \(hl_i, hr_i\),这里我取了 \(B = 1331\),反正一般取什么值都没什么问题的,因为可以自然溢出,哈希的 query 函数也很好写,一般形式如下:

int query(int l, int r) {
    return hash[r] - hash[l - 1] * powb[r - l + 1];
} 

为了方便,接下来记 \(ql(l, r)\) 表示 \(s_l \sim s_r\) 的哈希值,\(qr(l, r)\) 表示 \(s\) 翻转字符串之后 \(s_l \sim s_r\) 的哈希值。

然后我们从小到大枚举 \(i\),如果 \(ql(i, n) = qr(1, n - i + 1)\) 说明位置 \(i\) 就是答案,又因为我们是从小到大枚举的,所以答案就直接是最优的。

code

posted @ 2025-06-01 11:29  Laiyiwen_01  阅读(13)  评论(1)    收藏  举报