Pagini recente » Cod sursa (job #1567324) | Cod sursa (job #1938963) | Cod sursa (job #2742491) | Cod sursa (job #1545914) | Cod sursa (job #1569700)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int get_number_of_palindroms_from(int x, const char *str, int l)
{
int number=1, distance=0;
bool possible_identic=true;
do
{
distance++;
if(x-distance<0)
break;
else
{
if(possible_identic)
{
//pt cazul in care la un palindrom anterior format din nr impar de caract identice, adaugam un caract identic in stanga
if(str[x-distance]==str[x])
{
number++; //cout<<x<<" "<<distance<<" "<<"-\n";
}
else
{
possible_identic=false;
}
}
}
if(x+distance==l)
{
break;
}
else
{
if(str[x-distance]==str[x+distance])
{
number++; //cout<<x<<" "<<distance<<" "<<"+\n";
}
else
break;
}
}
while(1);
return number;
}
int main()
{
fstream f, g;
char str[1000000];
int i, l, sum=0;
f.open("pscpld.in", ios::in);
g.open("pscpld.out", ios::out);
f>>str; l=strlen(str);
for(i=0; i<l; i++)
{
sum+=get_number_of_palindroms_from(i, str, l);
}
g<<sum;
return 0;
}