Pagini recente »
Istoria paginii runda/sever_vs_simion_2
|
Istoria paginii runda/laborator_9d_28.02/clasament
|
Istoria paginii runda/lasm_13_03_2020_cl_12b_11/clasament
|
Cod sursă (job #307372)
|
Cod sursă (job #800406)
Cod sursă (job
#800406)
#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
*/