题意:通过第一个字符与a的关系翻译字符串,输出最长回文串和首尾下标,不存在则输出No solution!
思路:马拉车算法记录修改串的最长半径和下标。然后反推原串的起点到终点。
#include<stdio.h> #include<math.h> #include<string.h> #include<map> #include<algorithm> #define N 200060 #define ll long long using namespace std; const int maxn=2000110; char a[maxn],text[maxn]; int P[maxn]; int ans; int pos; void pre_treat(){ int len = strlen(a); for(int i=0;i<len;i++){ text[i*2] = '#'; text[i*2+1] = a[i]; } text[len*2]='#';text[len*2+1]='