Cod sursa(job #126102)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 21 ianuarie 2008 13:54:29
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#include<string.h>
long int n,i,fr[28],l[36001],j,sol;
char sir[20],dic[36001][20];
void heapdown(long int ii, long int nn);
void swap(long int ii, long int jj);
int main()
{	FILE *f=fopen("restante.in","r"), *g=fopen("restante.out","w");
	fscanf(f,"%ld",&n);
	for(i=1;i<=n;i++)
	{ fscanf(f,"%s",sir);
	  for(j=0;j<strlen(sir);j++) fr[(long int)(sir[j]-'a')]++;
	  for(j=0;j<26;j++) while(fr[j]){ dic[i][l[i]]='a'+(char)j;l[i]++;fr[j]--;}
	}
	for(i=n/2;i>=1;i--) heapdown(i,n);
	for(i=n;i>=1;i--){ swap(1,i); heapdown(1,i-1);}
	for(i=1;i<=n;i++)
	if(strcmp(dic[i],dic[i-1]))
	if(strcmp(dic[i],dic[i+1])) sol++;
	fprintf(g,"%ld",sol);
	fcloseall();
	return 0;
}
 void heapdown(long int ii, long int nn)
 {	long int is,id;
	is=2*ii;
	id=2*ii+1;
	if(is>nn) return;
	if(is<nn) if(strcmp(dic[is],dic[id])<0) is=id;
	if(strcmp(dic[ii],dic[is])<0) { swap(ii,is); heapdown(is,nn);}
 }
 void swap(long int ii, long int jj)
 {
	char daux[20];
	strcpy(daux,dic[ii]);
	strcpy(dic[ii],dic[jj]);
	strcpy(dic[jj],daux);
 }