Cod sursa(job #275651)

Utilizator katakunaCazacu Alexandru katakuna Data 10 martie 2009 16:38:35
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define nmax 36111
using namespace std;

int w,n,poz[nmax],p,u,i,nr,N;
char v[nmax][20],aux[20];

int cmp(int a, int b){

	int A = strlen(v[a]), B = strlen(v[b]);
	
	if( A > B )	return 1;
	if( B > A )	return 0;
	
	if( strcmp(v[a], v[b]) == 1 ) return 1;
	
	return 0;
}


int egale(int a, int b){

	if( strlen( v[a] ) == strlen( v[b] ) && strcmp(v[a],v[b]) == 0 ) return 1;

	return 0;
}

void up(int Poz, int n){
	int c = Poz,t;
	t = c >> 1;
	
	while( cmp( c , t ) && t ){
		strcpy(aux,v[c]);
		strcpy(v[c],v[t]);
		strcpy(v[t],aux);
		
		c = t; t = c >> 1;		
	}
}

void down(int Poz, int n){
	int c,t = Poz;
	c = t << 1;
	
	if( c < n && cmp( c+1, c ) )
		c++;
	
	while( c <= n && cmp( c, t ) ){
		strcpy(aux,v[c]);
		strcpy(v[c],v[t]);
		strcpy(v[t],aux);
		
		t = c;
		c = t << 1;
		if( c < n && cmp( c+1, c ) )
			c++;		
	}
	
}


void sort(){

	for(i=2; i<=n; i++)
		up(i,i);
	
	for(i=n; i > 1; i--){
		strcpy(aux,v[1]);
		strcpy(v[1],v[i]);
		strcpy(v[i],aux);
		
		down(1,i-1);
	}
}

int main(){

	FILE *f = fopen("restante.in","r");
	FILE *g = fopen("restante.out","w");

	fscanf(f,"%d\n",&n);
	for(i=1; i<=n; i++){
		fscanf(f,"%s",v[i]);
		poz[i] = i;
		N = strlen(v[i]);
		sort(v[i], v[i] + N);
	}
	
	sort();
	nr = 0;
	for(i=1; i<=n; i++){
		//u = poz[i-1]; p = poz[i]; w = poz[i+1];
		if( ! egale (i,i-1) && ! egale (i,i+1) )
			nr++;
	}
	
	fprintf(g,"%d",nr);
	
	fclose(f);
	fclose(g);

	return 0;

}