Pagini recente » Cod sursa (job #3353493) | Cod sursa (job #1139726) | Cod sursa (job #3355353) | Cod sursa (job #3347277) | Cod sursa (job #3328094)
#include <bits/stdc++.h>
using namespace std;
// key[i] = forma sortată a cuvântului i (cheia după care comparam anagramele)
string key[36005];
// cuv[i] = cuvântul original citit
char cuv[36005][20];
int main() {
ifstream fin("restante.in");
ofstream fout("restante.out");
int N;
fin >> N; // citim numărul de cuvinte
// Pentru fiecare cuvânt:
for (int i = 0; i < N; i++) {
fin >> cuv[i]; // citim cuvântul original (max 16 caractere)
key[i] = cuv[i]; // convertim la string (pentru sortare portabilă)
sort(key[i].begin(), key[i].end());
// sortăm literele cuvântului -> două anagrame vor avea aceeași formă sortată
// ex: "abc" -> "abc"; "cba" -> "abc"
}
// Sortăm toate formele sortate pentru a grupa anagramele consecutive
sort(key, key + N);
int originale = 0;
// Parcurgem grupurile de anagrame
for (int i = 0; i < N;) {
int j = i + 1;
// Avansăm cât timp key[j] este identic cu key[i]
// -> toate cuvintele sunt anagrame între ele
while (j < N && key[j] == key[i])
j++;
// Dacă grupul are un singur element (j - i == 1),
// înseamnă că acest cuvânt NU are anagrame -> este ORIGINAL
if (j - i == 1)
originale++;
// Sărim la următorul grup
i = j;
}
// Afișăm numărul de cuvinte originale
fout << originale;
}