Pagini recente » Cod sursa (job #1151781) | Cod sursa (job #641304) | Cod sursa (job #1192359) | Cod sursa (job #886642) | Cod sursa (job #37758)
Cod sursa(job #37758)
/* Ivan Nicolae - Bucuresti */
#include <stdio.h>
#include <string.h>
#define NMAX 2001
#define INFINITY 0x3f3f3f3f
int i,j,n,m,IN,SF,ala;
char A[NMAX+2];
int getLeft(char pat)
{
int i,ala,pzo=-INFINITY;
if (n % 2 == 0)
ala=(n/2);
else ala=(n/2)+1;
for (i=ala;i<=n;i++)
if (A[i]==pat)
{
pzo=i;
break;
}
return (n-pzo+1);
}
int getRight(char pat)
{
int i,ala,pzo=INFINITY;
if (n % 2 == 0)
ala=(n/2);
else ala=(n/2);
for (i=1;i<=ala;i++)
if (A[i] == pat)
{
pzo=i;
break;
}
return pzo+1;
}
void Elimina(int poz)
{
int i;
for (i=poz;i<=n;i++)
A[i]=A[i+1];
n--;
}
int main()
{
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
gets(A);
n = strlen(A); n--;
IN=0; SF=n;
while (IN < SF)
{
if (A[IN] == A[SF])
{ IN++; SF--; }
else {
int p1=getRight(A[SF]);
int p2=getLeft(A[IN]);
if (p1 < p2)
{
Elimina(IN);
ala=IN;
}
else if (p2 > p1)
{
Elimina(SF);
ala=SF;
}
else if (A[IN]<A[SF])
{
Elimina(SF);
ala=SF;
}
else {
Elimina(IN);
ala=IN;
}
if (IN > ala)
IN--;
if (SF >= ala)
SF--;
}
}
for (i=0;i<=n;i++)
printf("%c",A[i]);
fclose(stdin);
fclose(stdout);
return 0;
}