Cod sursa(job #807948)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 5 noiembrie 2012 22:37:00
Problema PalM Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#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], 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;
}