Cod sursa(job #396015)

Utilizator AnteusPatrascoiu Mihai Anteus Data 14 februarie 2010 13:16:18
Problema Restante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <string.h>
FILE *f=fopen ("restante.in", "r");
FILE *g=fopen ("restante.out", "w");
int i,j,n,sw,k,n2;
char v[36001][20];


void shell(int k, int n, int tipsort) {
int inj=n,i,sw;
char aux[16];
if (tipsort==1)
	while (inj>1)
	{
		inj/=2;
		do
		{
			sw=0;
			for (i=0;i<=n-inj;i++)
				if ( strcmp (v[i], v[i+inj])>0 )
					{
						strcpy (aux, v[i]);
						strcpy (v[i], v[i+inj]);
						strcpy (v[i+inj], aux);
						sw=1;
					}
		}
		while (sw);
	}
else
	while (inj>1)
	{
		inj/=2;
		do
		{
			sw=0;
			for (i=0;i<=n-inj;i++)
				if (v[k][i]>v[k][i+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];
					sw=1;
				}
		}
		while (sw);
	}
}


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

for (i=0;i<=n-1;i++)
{
	fscanf (f, "%s", &v[i]);
	n2=strlen(v[i])-1;
	shell (i, n2, 0);
}

shell (i, n-1, 1);

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