Pagini recente »
Clasament 10_3
|
Istoria paginii runda/lasm_20_02_2025_clasa11
|
Istoria paginii runda/cel_mai_greuuuuu/clasament
|
Monitorul de evaluare
|
Cod sursă (job #800407)
Cod sursă (job
#800407)
#include <fstream>
#include<algorithm>
using namespace std;
ifstream cin("cristela.in");
ofstream cout("cristela.out");
int v[1 << 20], dp[1 << 20];
int getPairs(int n)
{
long long total = (long long)(n) * (long long)(n - 1);
int i = 0, j = (1 << 20)-1;
for (; j >= 0; i++, j--)
{
total -= (long long)(v[i] * dp[j]);
}
return total / 2;
}
int main()
{
ios::sync_with_stdio(false);
int x, n;
string s;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
x = 0;
for (char c: s)
{
x |= (1 << (c - 'a'));
}
v[x]++;
dp[x]++;
}
for (int i = 0; i < 20; i++)
{
for (int mask = 0; mask < (1 << 20); mask++)
{
if (mask & (1 << i))
dp[mask] += dp[mask ^ (1 << i)];
}
}
cout << getPairs(n);
}
/*
abac 000111
dde 011000
bda 001011
faf 100001
111111
*/