Pagini recente » Cod sursa (job #1903600) | Cod sursa (job #1898091) | Cod sursa (job #1848433) | Cod sursa (job #1848438) | Cod sursa (job #807956)
Cod sursa(job #807956)
#include <fstream>
#include <cstring>
#define MAX 1024
using namespace std;
char sir[MAX], aux[MAX], last;
int lgt, n, L, R, C, dp[MAX], rez;
int main()
{
ifstream in("palm.in"); in>>aux; in.close();
lgt = strlen(aux);
for(int i = 0; i < lgt; i++)
{
sir[++n] = aux[i];
if(i != lgt - 1) sir[++n] = '#';
}
dp[1] = 1; C = L = R = 1;
for(int i = 1; i <= n; i++)
{
dp[i] = max(min(dp[2 * C - i] - 1, C + dp[C] - i), 1);
L = i - dp[i];
R = i + dp[i];
last = sir[i];
while(L && R <= n && (sir[L] == sir[R] && (last == '#' || sir[L] == '#' || last >= sir[L])))
{
if(sir[L] != '#') last = sir[L];
L--; R++; dp[i]++;
}
rez = max(rez, dp[i] - (sir[L + 1] == '#' ? 1 : 0));
if(i + dp[i] > C + dp[C]) C = i;
}
ofstream out("palm.out"); out<<rez; out.close();
return 0;
}