Pagini recente » Cod sursa (job #1467652) | Cod sursa (job #1827909) | Cod sursa (job #1899349) | Cod sursa (job #97841) | Cod sursa (job #3282997)
#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;
}