Cod sursa(job #213368)

Utilizator cosserBula Ionut cosser Data 9 octombrie 2008 16:58:29
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
#include <time.h>

using namespace std;

ifstream f ("restante.in");
ofstream o ("restante.out");


void schimb(char &a, char &b)
{
int aux;
aux=a;a=b;b=aux;
}

int pivotare(int s,int d)
{
return (rand()%(d-s+1))+s;
}

int partitie(char a[16],int s, int d)
{
int piv,i,j;
piv=pivotare(s,d);
schimb(a[s],a[piv]);
piv=a[piv];
i=s-1;j=d+1;

while(i<j)
     {
      do j--;
         while(a[j]>piv);
      do i++;
         while(a[i]<piv);
     if(i<j)schimb(a[i],a[j]);
       else return j;}
}


void insert(char a[16], int s, int d)
{
 int i,j,key;
for(j=s+1;j<=d;j++)
   {key=a[j];
    i=j-1;
    while(i>=0 && a[i]>a[j])
        {a[i+1]=a[i];
         i--;}
    a[i+1]=key;}
}



void quick_sort(char a[16],int s, int d)
{
int q;
if(s<d)
      {q=partitie(a,s,d);
       if(d-s+1>3){quick_sort(a,s,q);
                   quick_sort(a,q+1,d);}
          else{insert(a,s,q);
               insert(a,q+1,d);}
      }
}


int main()
{

srand( time(NULL) );
int n,i; char p[16]; char fin[36000][16]; int k=0;
f>>n;
for(i=1;i<=n;i++)
 {f>>p;
  quick_sort(p,0,strlen(p)-1);
  strcpy(fin[++k],p);}
quick_sort(fin[16],1,n);
k=0;
for(i=2;i<n;i=i+1)
 if(fin[i]!=fin[i+1] && fin[i]!=fin[i-1])++k;
 o<<k<<" ";




      //cout<<"\n";
      //system("PAUSE");
      return 0;
}