Pagini recente »
Istoria paginii runda/laborator10d06nov/clasament
|
Istoria paginii runda/2019-01-24-test-6/clasament
|
Statistici Anca Constantin (AncaVianista21)
|
Rating Matei Pana (5AMateiPana)
|
Cod sursă (job #800094)
Cod sursă (job
#800094)
#include <fstream>
#include <string>
using namespace std;
const int Nmax = 500005;
const int SIGMA = 20;
ifstream fin("cristela.in");
ofstream fout("cristela.out");
int n, sigma;
long long sol;
int cate[(1 << SIGMA)], numar_masti[(1 << SIGMA)];
void citire(){
int mask;
string nume;
cin >> n;
sigma = 0;
for(int i = 1; i <= n; i++){
cin >> nume;
mask = 0;
for(char c : nume){
mask |= (1 << (c - 'a'));
sigma = max(sigma, c - 'a' + 1);
}
cate[mask]++;
numar_masti[mask]++;
}
}
void calculare_numar_masti(){
for(int bit = 0; bit < sigma; bit++){
for(int mask = 0; mask < (1 << sigma); mask++){
if(mask & (1 << bit)){
numar_masti[mask] += numar_masti[(mask ^ (1 << bit))];
}
}
}
}
void calculare_solutie(){
sol = 1LL * n * (n - 1);
for(int mask = 0, rest = (1 << sigma) - 1; mask < (1 << sigma); mask++, rest--){
sol -= 1LL * cate[mask] * numar_masti[rest];
}
sol /= 2;
}
void afisare_solutie(){
cout << sol;
}
int main(){
citire();
calculare_numar_masti();
calculare_solutie();
afisare_solutie();
return 0;
}