Pagini recente »
Cod sursă (job #521713)
|
Cod sursă (job #574063)
|
Borderou de evaluare (job #690147)
|
Istoria paginii runda/c6_6/clasament
|
Cod sursă (job #800410)
Cod sursă (job
#800410)
#include <fstream>
#include<algorithm>
using namespace std;
ifstream cin("cristela.in");
ofstream cout("cristela.out");
int v[1 << 20], dp[1 << 20];
long long getPairs(int n, int m)
{
long long total = (long long)(n) * (long long)(n - 1);
int i = 0, j = (1 << m)-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, m=0;
string s;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
x = 0;
for (char c: s)
{
x |= (1 << (c - 'a'));
m = max(m, c - 'a' + 1);
}
v[x]++;
dp[x]++;
}
for (int i = 0; i < m; i++)
{
for (int mask = 0; mask < (1 << m); mask++)
{
if (mask & (1 << i))
dp[mask] += dp[mask ^ (1 << i)];
}
}
cout << getPairs(n, m);
}
/*
abac 000111
dde 011000
bda 001011
faf 100001
111111
*/