Cod sursa(job #184150)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 23 aprilie 2008 10:30:46
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream.h>
#include<string.h>
int n,i,j,k,sol=0,q;
char v[36100][17],aux;


void pozitie1 (int li, int  ls, int  &q)

 { int p,r,di,dj,aux2;

   char a;

  p=li; r=ls; di=0; dj=1;

  while(p<r)

 {if(v[i][p]>v[i][r]) { a=v[i][p]; v[i][p]=v[i][r]; v[i][r]=a;
			      aux2=di;di=dj;dj=aux2;}
    p=p+di;
    r=r-dj;
   }

   q=p;
 }

void quick1 ( int li , int ls)

 {
  if(li<ls)

     { pozitie1(li,ls,q);

       quick1(li,q-1);

       quick1(q+1,ls);
     }
 }


void pozitie (int li, int  ls, int  &q)

 { int p,r,di,dj,aux2;

   char a[17];

  p=li; r=ls; di=0; dj=1;

  while(p<r)

  {
    if(strcmp(v[p],v[r])>0) { strcpy(a,v[p]);
			      strcpy(v[p],v[r]);
			      strcpy(v[r],a);

				  aux2=di; di=dj; dj=aux2;}

    p=p+di;
    r=r-dj;
   }

   q=p;
 }

void quick ( int li , int ls)

 {
  if(li<ls)

     { pozitie(li,ls,q);

       quick(li,q-1);

       quick(q+1,ls);
     }
 }
 void pozitie2 (int li, int  ls, int  &q)

 { int p,r,di,dj,aux2;

   char a[17];

  p=li; r=ls; di=0; dj=1;

  while(p<r)

  {
    if(strlen(v[p])>strlen(v[r])) { strcpy(a,v[p]);
				   strcpy(v[p],v[r]);
				   strcpy(v[r],a);

				    aux2=di; di=dj; dj=aux2;}

    p=p+di;
    r=r-dj;
   }

   q=p;
 }

void quick2 ( int li , int ls)

 {
  if(li<ls)

     { pozitie2(li,ls,q);

       quick2(li,q-1);

       quick2(q+1,ls);
     }
 }
int main()
{
ifstream f("restante.in");
ofstream g("restante.out");

f>>n;f.get();

for(i=1;i<=n;i++)
 {
  f.get(v[i],16);

  f.get();
   quick1(0,strlen(v[i])-1);
 }
quick2(1,n);

j=1;

for(i=1;i<=n;i++)

 {while(strlen(v[i])==strlen(v[i+1])) i++;

    quick(j,i);
 j=i+1;
 }

for(i=1;i<=n;i++)

 if(strcmp(v[i],v[i+1])!=0) sol++;

  else while (strcmp(v[i],v[i+1])==0) i++;

g<<sol;
f.close();
g.close();
return 0;
}