Cod sursa(job #635351)

Utilizator darkseekerBoaca Cosmin darkseeker Data 19 noiembrie 2011 10:45:29
Problema PalM Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 1.35 kb
#include <fstream>
#include <cstring>
#define NMAX 505
#define in "palm.in"
#define out "palm.out"
using namespace std;

char sir[NMAX],lg;
int maxim = 1;

ifstream fin(in);
ofstream fout(out);

inline int estePalImpar(int poz)
{
	int i = poz -1 , j = poz + 1,ans = 1;
	while(i >= 0 && j < lg && sir[i] == sir[j] && sir[i] <= sir[i+1] && sir[j] <= sir[j-1])
		{
			ans+=2;
			i--;
			j++;
		}
	return ans;
}

inline int estePalPar1(int poz)
{
	int i = poz,j = poz + 1,ans = 0;
	if(sir[i] != sir[j])
		return 1;
	else
		ans = 2;
	i--;
	j++;
	while(i >= 0 && j < lg &&  sir[i] == sir[j] && sir[i] <= sir[i+1] && sir[j] <= sir[j-1])
	{
		ans+=2;
		i--;
		j++;
	}
	return ans;
}

inline int estePalPar2(int poz)
{
	int i = poz - 1,j = poz,ans = 0;
	if(sir[i] != sir[j])
		return 1;
	else 
		ans = 2;
	i--;
	j++;
	while(i >= 0 && j < lg &&  sir[i] == sir[j] && sir[i] <= sir[i+1] && sir[j] <= sir[j-1])
	{
		ans+=2;
		i--;
		j++;
	}
	return ans;
}

int main()
{
	fin.get(sir,NMAX,'\n');
	fin.get();
	int i = 0;
	lg = strlen(sir);
	
	for(i = 0; i < lg; i++)
		{
			if(estePalImpar(i) > maxim)
			maxim = estePalImpar(i);
			if(estePalPar1(i) > maxim)
				maxim = estePalPar1(i);
			if(estePalPar2(i) > maxim)
				maxim = estePalPar2(i);
		}
	
	fout<<maxim<<'\n';
	fin.close();
	fout.close();
	return 0;
}