Cod sursa(job #179409)

Utilizator albuaAlbu Alexandru albua Data 15 aprilie 2008 21:32:59
Problema Restante Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#include <string.h>

FILE *f,*g;
char a[365][20],cautat[20];
int i,n,contor,ok;

int divide(int ls, int ld)
{
  int s,d;
  char aux[20];
  s=ls;
  d=ld;
  strcpy(aux,a[ls]);
  while(s<d)
    {
	  while((s<d)&&(strcmp(a[d],aux)>0))d--;
	  strcpy(a[s],a[d]);  
	  while((s<d)&&(strcmp(a[s],aux)<=0))s++;
	  strcpy(a[d],a[s]);
	}
  strcpy(a[s],aux);
  return s;
}

void quick(int ls, int ld)
{
  int k;
  if(ls<ld)
    {
	  k=divide(ls,ld);
	  quick(ls,k-1);
	  quick(k+1,ld);
	}
}

void sorteaza(int x)
{
  int i,j,len,pmin;
  char min;
  len=strlen(a[x]);
  for(i=0;i<len-1;i++)
    {
	  min=a[x][i];
	  pmin=i;
	  for(j=i+1;j<len;j++)
	    if(a[x][j]<min)
		  {
		    min=a[x][j];
			pmin=j;
		  }
	  a[x][pmin]=a[x][i];
	  a[x][i]=min;
	}
}

int main()
{
  f=fopen("restante.in","r");
  g=fopen("restante.out","w");
  fscanf(f,"%d\n",&n);
  for(i=1;i<=n;i++)
    fscanf(f,"%s\n",&a[i]);
  //sortam literele din cuvinte
  for(i=1;i<=n;i++)
    sorteaza(i);
  //sortam cuvintele
  quick(1,n);
  // caut sa elimin
  strcpy(cautat,a[1]);
//  strcpy(a[1],'sos');
  for(i=2;i<=n;)
    {
      ok=1;
	  while((strcmp(cautat,a[i])==0)&&(i<=n))
	    {
		  //strcpy(a[i],);
		  i++;
		  ok=0;
		}
	  if(ok==1)
	    contor++;
	  if(i!=n)
	    {
	      strcpy(cautat,a[i++]);
	      //strcpy(a[i-1],0);
	    }
	  else
	    {
	      contor++;
	      i++;
	    }
	}
  fprintf(g,"%d\n",contor);
  fclose(f);  fclose(g);
  return 0;
}