Cod sursa(job #395310)

Utilizator AnteusPatrascoiu Mihai Anteus Data 12 februarie 2010 19:24:23
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
#include <string.h>
FILE *f=fopen ("restante.in", "r");
FILE *g=fopen ("restante.out", "w");
int v[2][36001],i,n,j,c,k,s;
char a[20];

void schimbare(int k, int k2, int i, int inj) 
{
    v[k][i]=v[k][i]^v[k][i+inj];
	v[k][i+inj]=v[k][i]^v[k][i+inj];
	v[k][i]=v[k][i]^v[k][i+inj];
						
	v[k2][i]=v[k2][i]^v[k2][i+inj];
	v[k2][i+inj]=v[k2][i]^v[k2][i+inj];
	v[k2][i]=v[k2][i]^v[k2][i+inj];
}

void shell(int k, int k2) {
int inj=n,i,sw;
while (inj>1)
{
	inj/=2;
	do
	{
		sw=0;
		for (i=1;i<=n-inj;i++)
			if (v[k][i]<v[k][i+inj])
				if (k)
				{
					if (v[k2][i]==v[k2][i+inj])
					{
						schimbare (k, k2, i, inj);
						sw=1;
					}
				}
				else
				{
					schimbare (k, k2, i, inj);
					sw=1;
				}
	}
	while (sw);
}
}

int main() {
fscanf (f, "%d", &n);

for (i=1;i<=n;i++)
{
	fscanf (f, "%s", &a);
	s=0; c=0;
	for (j=0;j<=strlen(a)-1;j++)
	{
		if (!j)
			c++; 
		else
			if (j<strlen(a)-1)
			{
				if (strchr (a+j+1, a[j])==0)
					c++;
			}
			else
				if (a[j]!=a[0])
					c++;
		s+=a[j];
	}
	v[0][i]+=s;
	v[1][i]+=c;
}

shell (0, 1);
shell (1, 0);

for (i=1;i<=n-1;i++)
	if (v[0][i]==v[0][i+1])
	{
		if (v[1][i]!=v[1][i+1])
			k++;
	}
	else
		if (i==n-1)
			k+=2;
		else
			k++;
	
fprintf (g, "%d", k);
return 0;
}