Cod sursa(job #3283000)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 7 martie 2025 19:40:24
Problema Restante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <fstream>
using namespace std;

int main() {
    // Deschidem fișierele de intrare și ieșire
    ifstream fin("restante.in");
    ofstream fout("restante.out");

    // Citim numărul de cuvinte din fișierul de intrare
    int n;
    fin >> n;

    // Creăm un vector pentru a stoca cuvintele citite
    vector<string> words(n);
    for (int i = 0; i < n; ++i) {
        fin >> words[i]; // Citim fiecare cuvânt
    }

    // Creăm o mapă pentru a stoca cuvintele sortate și numărul lor de apariții
    map<string, int> anagramCount;

    // Iterăm prin fiecare cuvânt pentru a construi maparea anagramei
    for (const string& word : words) {
        // Creăm o copie sortată a cuvântului
        string sortedWord = word;
        sort(sortedWord.begin(), sortedWord.end());

        // Incrementăm numărul de apariții al cuvântului sortat în mapă
        anagramCount[sortedWord]++;
    }

    // Variabilă pentru a număra cuvintele originale
    int originalCount = 0;

    // Iterăm prin fiecare cuvânt original pentru a verifica dacă este unic
    for (const string& word : words) {
        // Creăm o copie sortată a cuvântului original
        string sortedWord = word;
        sort(sortedWord.begin(), sortedWord.end());

        // Dacă numărul de apariții al cuvântului sortat este 1, înseamnă că este unic
        if (anagramCount[sortedWord] == 1) {
            originalCount++; // Incrementăm numărul de cuvinte originale
        }
    }

    // Scriem numărul de cuvinte originale în fișierul de ieșire
    fout << originalCount << endl;

    // Închidem fișierele de intrare și ieșire
    fin.close();
    fout.close();

    return 0;
}