Cod sursa(job #277062)

Utilizator alecmanAchim Ioan Alexandru alecman Data 11 martie 2009 14:50:08
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

#define INPUT "restante.in"
#define OUTPUT "restante.out"
#define NMAX 36001
#define MMAX 17

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long N;
char Str[ NMAX ][ MMAX ];
long Poz[ NMAX ];

inline int cmpS(char _X, char _Y)
{
  return _X < _Y;
}

inline int cmpT(long _X, long _Y)
{
  if(strcmp(Str[ _X ], Str[ _Y ]) >= 0) return 0;
  else
    return 1;
}

void readData()
{
  fscanf(fin, "%ld", &N);
  char c;
  long len;

  fscanf(fin, "%c", &c);

  for(long i = 0; i < N; ++i)
  {
    fscanf(fin, "%s", &Str[ i ]);
    Poz[ i ] = i;
    len = strlen(Str[i]);
    sort(Str[ i ], Str[ i ] + len, cmpS);
  }
}

void solve()
{
  long cont = -1;

  for(long i = 0; i < N; ++i)
  {
    ++cont;
    if( i != N-1)
      while( i < N && strcmp(Str[ Poz[ i ] ], Str[ Poz[ i+1]]) == 0)
        ++i;
  }

  fprintf(fout, "%ld\n", cont);
}

int main()
{
  readData();

  sort(Poz, Poz + N, cmpT);

  solve();

  fclose(fin);
  fclose(fout);

  return 0;
}