Cod sursa(job #583745)

Utilizator maritimCristian Lambru maritim Data 22 aprilie 2011 13:20:39
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

typedef struct
{
	int nr;
	char S[21];
} cuv;

cuv A[36001];
int N;
int nr = 0;

void citire(void)
{
	FILE *f = fopen("restante.in","r");
	
	fscanf(f,"%d ",&N);
//	fgetc(f);
	for(int i=1;i<=N;i++)
	{
		fgets(A[i].S,200,f);
		A[i].nr = strlen(A[i].S)-2;
		sort(A[i].S,A[i].S+A[i].nr+1);
	}
	
	fclose(f);
}

int poz(int li, int ls)
{
	cuv a;
	a = A[(li+ls)/2];
	A[(li+ls)/2] = A[li];
	A[li] = a;
	int i1 = 0;
	int j1 = -1;
	int c;
	while(li<ls)
	{
		if(A[li].nr>A[ls].nr || (A[li].nr == A[ls].nr && strcmp(A[li].S,A[ls].S)>0))
		{
			a = A[li];
			A[li] = A[ls];
			A[ls] = a;
			c = -i1;
			i1 = -j1;
			j1 = c;
		}
		li += i1;
		ls += j1;
	}
	return li;
}

void quicksort1(int li,int ls)
{
	if(li<ls)
	{
		int k = poz(li,ls);
		quicksort1(li,k-1);
		quicksort1(k+1,ls);
	}
}

void solve(void)
{
	quicksort1(1,N);
	int i = 1;
	while(i<=N)
	{
		int j = i+1;
		while(j<=N && !strcmp(A[i].S,A[j].S))
			j ++;
		if(j == i+1)
			nr ++;
		i = j;
	}
}

int main()
{	
	FILE *f = fopen("restante.out","w");
	
	citire();
	solve();
	fprintf(f,"%d\n",nr);
	
	fclose(f);
	return 0;
}