Cod sursa(job #3328094)

Utilizator maxtraAlex Deonise maxtra Data 6 decembrie 2025 10:29:32
Problema Restante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#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;
}