Pagini recente » Cod sursa (job #1515752) | Cod sursa (job #2184919) | Cod sursa (job #1927711) | Cod sursa (job #2029775) | Cod sursa (job #637122)
Cod sursa(job #637122)
#include <stdio.h>
#include <string.h>
#define LMAX 1 << 9
int D[2][LMAX], last[LMAX], x[LMAX];
char s[LMAX];
bool used[LMAX];
int main ()
{
int N, i, j, it, k;
freopen ("palm.in", "r", stdin);
freopen ("palm.out", "w", stdout);
gets (s + 1);
N = strlen (s + 1);
for (i = 1; i <= N; i ++)
x[i] = s[i] - 'a';
for (i = 1; i <= N; i ++)
{
for (j = i - 1; j >= 1; j --)
if (x[j] <= x[i] && ((D[0][i] == 0 && D[1][i] == 0) || D[1][j]) && !used[j])
{
if (!last[j])
last[j] = N;
for (k = last[j] - 1; k >= j + 1; k --)
if (x[k] == x[i])
break;
if (k == j || k == i)
{
if (D[1][j] + 1 > D[0][i])
D[0][i] = D[1][j] + 1;
}
else
if (D[1][j] + 2 > D[1][i])
{
D[1][i] = D[1][j] + 2;
last[i] = k;
used[k] = 1;
}
}
if (D[0][i] == 0 && D[1][i] == 0)
{
for (j = N; j >= i + 1; j --)
if (x[j] == x[i])
break;
if (j == i)
D[0][i] = 1;
else
{
D[1][i] = 2;
used[j] = 1;
last[i] = j;
}
}
}
int max = 0;
for (i = 1; i <= N; i ++)
{
if (D[0][i] > max)
max = D[0][i];
if (D[1][i] > max)
max = D[1][i];
}
printf ("%d", max);
return 0;
}