Cod sursa(job #3282997)

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

// Funcție pentru a verifica dacă două șiruri de caractere sunt anagrame
bool isAnagram(const string& a, const string& b) {
    // Dacă lungimile șirurilor sunt diferite, nu pot fi anagrame
    if (a.length() != b.length()) {
        return false;
    }

    // Creăm copii ale șirurilor și le sortăm alfabetic
    string sortedA = a;
    string sortedB = b;
    sort(sortedA.begin(), sortedA.end());
    sort(sortedB.begin(), sortedB.end());

    // Dacă șirurile sortate sunt egale, atunci șirurile originale sunt anagrame
    return sortedA == sortedB;
}

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);

    // Citim cele n cuvinte din fișierul de intrare
    for (int i = 0; i < n; ++i) {
        fin >> words[i];
    }

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

    // Iterăm prin fiecare cuvânt din vector
    for (int i = 0; i < n; ++i) {
        // Presupunem inițial că cuvântul este original
        bool original = true;

        // Iterăm prin restul cuvintelor din vector
        for (int j = 0; j < n; ++j) {
            // Dacă găsim un alt cuvânt care este o anagramă a cuvântului curent (și nu este același cuvânt)
            if (i != j && isAnagram(words[i], words[j])) {
                // Atunci cuvântul curent nu este original
                original = false;
                break; // Ieșim din bucla interioară
            }
        }

        // Dacă cuvântul este original, incrementăm contorul
        if (original) {
            originalCount++;
        }
    }

    // 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;
}