Cod sursa(job #1159520)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 29 martie 2014 17:57:59
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <map>

struct Key {
  int c['z' - 'a' + 1];

  Key() {
    memset(c, 0x00, sizeof(int) * ('z' - 'a' + 1));
  }
};

std::map<Key, int> counts;

bool operator< (const Key& left, const Key& right) {
  for (int i = 0; i < 'z' - 'a' + 1; ++i) {
    if (left.c[i] < right.c[i]) {
      return true;
    } else if (left.c[i] > right.c[i]) {
      return false;
    }
  }
  return false;
}

int main() {
  std::ifstream in("restante.in");
  int n;
  in >> n;
  std::string s;
  for (int i = 0; i < n; ++i) {
    in >> s;
    Key k;
    for (int i = 0; i < s.length(); ++i) {
      k.c[s[i] - 'a']++;
    }
    counts[k]++;
  }
  in.close();

  int sol = 0;
  for (std::map<Key, int>::const_iterator it = counts.begin();
       it != counts.end();
       ++it) {
    if (it->second == 1) {
      sol++;
    }
  }

  std::ofstream out("restante.out");
  out << sol << std::endl;
  out.close();

  return 0;
}