Cod sursa(job #289005)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 26 martie 2009 11:59:23
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>


int len(char *p)
{
    return (*p ? 1 + len(++p) : 0);
}

void qsort(char* v,int st,int dr)
{
   int mijl,aux,max,min;
   max = dr; min = st;
   mijl = v[st+(dr-st)/2];
   
   do
   {
      while(v[min] < mijl) min++;
      while(v[max] > mijl) max--;
      if(min <= max)
      {
         aux = v[min];
         v[min++] = v[max];
         v[max--] = aux;    
      }    
   }while(min <= max);
   if(st < max) qsort(v,st,max);
   if(min < dr) qsort(v,min,dr);        
}  

long n,i,j,k,t = 0,ok;
char (*lit)[16] = new char[36000][16];
char p1[36000/8];

int main()
{
    freopen("restante.in","r",stdin);
    freopen("restante.out","w",stdout);
    
    scanf("%ld",&n);
    for(i = 0; i < n; i++)
    {
       scanf("%s",lit[i]);   
       qsort(lit[i],0,len(lit[i])-1);
    }                    
    
    for(i = 0; i < n; i++)
    {
      ok = 1;
      
      if(p1[1<<(i%8)] == 0)
      {
         for(j = i+1; j < n; j++)
         {         
           if(len(lit[i]) == len(lit[j]))
             for(k = 0; k < len(lit[i]) && lit[i][k] == lit[j][k]; k++)
               ;
           if(k == len(lit[i])) ok = 0,p1[1<<(i%8)] |= 1<<(i%8),p1[1<<(j%8)] |= 1<<(j%8);       
         }          
      }
      else
      {
         ok = 0; 
      } 
      if(ok) t++;
    }     
    printf("%ld",t);     
    fclose(stdin); fclose(stdout);
    return 0;
}