Cod sursa(job #1972277)

Utilizator TincaMateiTinca Matei TincaMatei Data 22 aprilie 2017 18:11:03
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <ctype.h>
#include <algorithm>

struct Word {
 char ch[16];
} v[36000];

bool cmp(Word a, Word b) {
  int i = 0;
  while(i < 16 && a.ch[i] == b.ch[i])
    ++i;
  return i < 16 && (a.ch[i] < b.ch[i]);
}

bool egale(Word a, Word b) {
  int i = 0;
  while(i < 16 && a.ch[i] == b.ch[i])
    ++i;
  return i == 16;
}

char getch(FILE *fin) {
  char ch = fgetc(fin);
  while(ch == ' ' || ch == '\n')
    ch = fgetc(fin);
  return ch;
}

int main() {
  int n, r = 0;
  char ch;
  FILE *fin = fopen("restante.in", "r");
  fscanf(fin, "%d", &n);
  for(int i = 0; i < n; ++i) {
    ch = getch(fin);
    int t = 0;
    while(isalpha(ch)) {
      v[i].ch[t++] = ch;
      ch = fgetc(fin);
    }
    std::sort(v[i].ch, v[i].ch + t);
  }
  fclose(fin);

  std::sort(v, v + n, cmp);
  for(int i = 1; i < n - 1; ++i)
    if(!egale(v[i], v[i + 1]) && !egale(v[i - 1], v[i]))
      r++;
  if(n > 1 && !egale(v[0], v[1]))
    r++;
  if(n > 2 && !egale(v[n - 1], v[n - 2]))
    r++;

  FILE *fout = fopen("restante.out", "w");
  fprintf(fout, "%d", r);
  fclose(fout);
  return 0;
}