Cod sursa(job #127998)

Utilizator coderninuHasna Robert coderninu Data 25 ianuarie 2008 19:20:47
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <string.h>
#define Nmax 36002
#define Lmax 18

int n, i, rez;
char c[Nmax][Lmax];

void sort(char *);
void sort(int,int);

int main()
{
	freopen("restante.in", "r", stdin);
	scanf("%d\n", &n);
	for (i=1; i<=n; i++) scanf("%s\n", &c[i]);
	fclose(stdin);
	for (i=1; i<=n; i++) sort(c[i]);
	sort(1,n);
	for (i=1; i<=n; i++)
	{
		if (strcmp(c[i],c[i+1])==0)
			for (i++; strcmp(c[i],c[i+1])==0; i++);
		else rez++;
	}
	freopen("restante.out", "w", stdout);
	printf("%d\n", rez);
	fclose(stdout);
	return 0;
}

void sort(char *d)
{

	int i;
	char temp;
	for (int l=strlen(d), ok=1; ok && l; l--)
	{
		ok=0;
		for (i=0; i<l-1; i++)
			if (d[i]>d[i+1])
			{
				temp=d[i]; d[i]=d[i+1]; d[i+1]=temp;
				ok=1;
			}

	}
}

void sort(int p, int q)
{
	int st=p, dr=q;
	char x[Lmax+1]; memset(x, 0, 17);
	memcpy(x,c[st],strlen(c[st]));
	while (st<dr)
	{
		while (st<dr && strcmp(x,c[dr])<=0) dr--;
		memset(c[st],0,strlen(c[st])+1);
		memcpy(c[st],c[dr],strlen(c[dr]));
		while (st<dr && strcmp(x,c[st])>=0) st++;
		memset(c[dr],0,strlen(c[dr])+1);
		memcpy(c[dr],c[st],strlen(c[st]));
	}
	memcpy(c[st],x,strlen(x));
	if (st+1<q) sort(st+1,q);
	if (st-1>p) sort(p,st-1);
}