Cod sursa(job #159665)

Utilizator Mishu91Andrei Misarca Mishu91 Data 14 martie 2008 12:12:27
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <algorithm>
#define Nmax 36003
#include <string.h>

FILE *fin=freopen("restante.in","r",stdin),
     *fout=freopen("restante.out","w",stdout);

using namespace std;

char A[Nmax][20];

unsigned int viz[Nmax];

int comp(int a,int b) {
	return !strcmp( A[a], A[b] ); // compari liniile a si b din matrice
}

int n;

void citire()
{
  scanf("%d",&n);
  
  fgetc(fin);
  
  for(int i=0; i<n; i++)
    scanf(" %s",A[i]);
}


void dica()
{
  int nr = n;
  for(int i=0; i<n-1; i++)
   if(viz[i] == 0)
    for(int j=i+1; j<n; j++)
        if(strcmp(A[i],A[j]) == 0)
        {
          if(viz[i] == 0)
            viz[i] = viz[j] = 1,nr-=2;
          else 
            viz[j] = 1,nr--;
        }
  printf("%d\n",nr);
        
}

void solve()
{
  for(int i=0; i<n; i++)
    sort(A[i],A[i] + strlen(A[i]));
   int b[Nmax],nr=n;
   
   for(int i=0; i<n; i++)
     b[i] = i;
    sort(b,b+n,comp);
    for(int i=0; i< n-1; i++)
      if(strcmp(A[b[i]],A[b[i+1]]) == 0)
          if(viz[b[i]] == 0)        
            viz[b[i]]=viz[b[i+1]] =1, nr-=2;
          else 
            viz[b[i+1]] = 1, nr--;
   printf("%d\n",nr);
}

int main()
{
  citire();
  solve(); 
  return 0;
}