Cod sursa(job #159459)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 14 martie 2008 10:06:35
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream.h>
#include <string.h>
#define MAX 36010
#define MAX1 20
ifstream fin ("restante.in");
ofstream fout ("restante.out");

char a[MAX][MAX1];
long n,numar,k,ordine;

void citire()
{
  fin>>n;
  fin.getline(a[0],MAX1);
  for (int i=0;i<n;i++)
     fin.getline(a[i],MAX1);
}

void poz (long li,long ls,long &k,char a[MAX1])
{
   int i=li,j=ls,i1=0,j1=-1,aux;
   char c;
   while (i<j)
   {
      if (a[i]>a[j])
      {
	 c=a[i];
	 a[i]=a[j];
	 a[j]=c;
	 aux=i1;
	 i1=-j1;
	 j1=-aux;
      }
   i+=i1;
   j+=j1;
   }
   k=i;
}

void qsort (long li,long ls)
{
  if (li<ls)
  {
    poz (li,ls,k,a[ordine]);
    qsort (li,k-1);
    qsort (k+1,ls);
  }
}

void ordonare()
{
   for (int i=0;i<n;i++)
   {
     k=0;
     ordine=i;
     qsort (0,strlen(a[i])-1);
   }
}

void poz1 (long li,long ls,long &k,char a[MAX][MAX1])
{
  long i=li,j=ls,i1=0,j1=-1,c;
  char s[MAX1];
  while (i<j)
  {
     if (strcmp(a[i],a[j])>0)
     {
       strcpy(s,a[i]);
       strcpy(a[i],a[j]);
       strcpy(a[j],s);
       c=i1;
       i1=-j1;
       j1=-c;
     }
     i+=i1;
     j+=j1;
  }
k=i;
}

void qsort1 (long li,long ls)
{
  if (li<ls)
  {
    poz1(li,ls,k,a);
    qsort1 (li,k-1);
    qsort1 (k+1,ls);
  }
}

void afisare()
{
  for (int i=1;i<n-1;i++)
     if (strcmp(a[i],a[i+1])!=0 && strcmp(a[i],a[i-1])!=0)
	numar++;
  if (strcmp(a[0],a[1])!=0)
    numar++;
  if (strcmp(a[n-1],a[n-2])!=0)
    numar++;
    fout<<numar;
}

int main ()
{
   citire();
   ordonare();
   k=0;
   qsort1(0,n-1);
   afisare();
   fin.close();
   fout.close();
   return 0;
}