Cod sursă (job #800410)

Utilizator avatar Dumy Dumitrescu Andrei Dumy IP ascuns
Problemă Cristela (clasele 9-12) Compilator cpp-32 | 0,91 kb
Rundă Arhiva de probleme Status evaluat
Dată 20 dec. 2024 18:16:35 Scor 100
#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

*/