Pagini recente » Cod sursa (job #449693) | Cod sursa (job #2617941) | Cod sursa (job #3215675) | Cod sursa (job #840903) | Cod sursa (job #3283000)
#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;
}