D. Prefix-Suffix Palindrome (马拉车)
Posted willems
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D. Prefix-Suffix Palindrome (马拉车)相关的知识,希望对你有一定的参考价值。
题目:传送门
题意:给你字符串 s ,问长度最大的字符串 t = a + b 是什么,其中,t 是回文串, a 是字符串 s 的前缀, b 是字符串 s 的后缀。
思路:
我们先把能构成回文的,前缀和后缀取出来,然后对剩下的字符串,求,最长的前缀回文,最长后缀回文,取两者最大即可。
#include <bits/stdc++.h> #define LL long long #define ULL unsigned long long #define mem(i, j) memset(i, j, sizeof(i)) #define rep(i, j, k) for(int i = j; i <= k; i++) #define dep(i, j, k) for(int i = k; i >= j; i--) #define pb push_back #define make make_pair #define INF INT_MAX #define inf LLONG_MAX #define PI acos(-1) #define fir first #define sec second using namespace std; const int N = 1e6 + 5; const LL mod = 1e9 + 7; LL ksm(LL a, LL b) { LL ans = 1LL; while(b) { if(b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans; } struct manacher { char ch[N << 1]; int p[N << 1]; void work(char *s, int len) { int l = 0; ch[l++] = ‘&‘; ch[l++] = ‘#‘; rep(i, 0, len - 1) { ch[l++] = s[i]; ch[l++] = ‘#‘; } ch[l] = ‘