#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 1200;
char Ma[M*2];
int Mp[M*2];
void Manacher(char s[], int len){//预处理
int l = 0;
Ma[l++] = '$';
Ma[l++] = '#';
for(int i = 0; i < len; i++){
Ma[l++] = s[i];
Ma[l++] = '#';
}
Ma[l] = 0;
int mx = 0, id = 0;
for(int i = 0; i < l; i++){
Mp[i] = mx > i ? min(Mp[2*id-i], mx-i):1;
while(Ma[i+Mp[i]] == Ma[i-Mp[i]])Mp[i]++;
if(i + Mp[i] > mx){
mx = i + Mp[i];
id = i;
}
}
}
char s[M];
int dp[M];
bool fact(int u, int v){//判断该区间是否为回文串
u--, v--;///注意我的下标设置
int x, y;
x = u*2 + 2, y = v*2 + 2;
int m = (x+y)/2;
// printf("u = %d, v = %d, s = %d\n",u, v, Mp[m]-1 >= v-u+1);
return Mp[m]-1 >= v-u+
UVA - 11584 Partitioning by Palindromes
最新推荐文章于 2020-10-04 17:23:18 发布