Cod sursa(job #127111)

Utilizator marinMari n marin Data 23 ianuarie 2008 13:59:07
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <stdio.h>
#include <string.h>

#define DIM 36001

char *w[DIM];
long int n,i,ii,jj,j;
char s[17];
int x,y;


void creHeap(char *v[], long int n){
  long int i,c,p;
  char *aux;
  for (i=2;i<=n;i++){
    c=i;
    p=i>>1;
    while ((p) && (strcmp(v[c],v[p])>0)) {
      aux = v[p];
      v[p] = v[c];
      v[c] = aux;
      c = p;
      p = p>>1;
    }
  }
}

void heapSort(char *v[], long int n){
  long int i,p,c;
  char* aux;
  creHeap(v,n);
  for (i=n;i>1;i--) {
    aux = v[i];
    v[i]=v[1];
    v[1]=aux;

    p=1;
    c=p<<1;
    while ((c<=i-1) && (strcmp(v[c],v[p])>=0)) {
      if ((c+1<=i-1) && (strcmp(v[c+1],v[c])>0))
	c++;
      aux=v[p];
      v[p]=v[c];
      v[c]=aux;
      p=c;
      c=p<<1;
    }

  }

}


int main(){
  FILE *f = fopen("restante.in","r");
  fscanf(f,"%ld",&n);
  for (i=1;i<=n;i++){
    fscanf(f,"%s",s);
    x = strlen(s);

    for (ii=0;ii<x-1;ii++)
      for (jj=ii+1;jj<=x-1;jj++)
	if (s[ii]>s[jj]) {
	  y = s[ii];
	  s[ii] = s[jj];
	  s[jj] = y;
	}


    w[i]=new char(x+1);
    strcpy(w[i],s);

  }
  fclose(f);
/*  printf("Dupa citire:\n");
  for (i=1;i<=n;i++)
    printf("%s\n",w[i]);*/

  heapSort(w,n);

/*  printf("Dupa sort:\n");
  for (i=1;i<=n;i++)
    printf("%s\n",w[i]);*/




  j=1;
  for (i=2;i<=n;i++)
    if ((w[i]!=NULL) && (strcmp(w[i],w[j])!=0)) {
      j++;
      w[j]=w[i];
    }

  FILE *g = fopen("restante.out","w");
  fprintf(g,"%ld",j);
  fclose(g);

//  for (i=1;i<=n;i++)
//    printf("%s\n",w[i]);

//  for (i=1;i<=n;i++)
//    delete w[i];
//  printf("\n");
  return 0;
}