Cod sursă (job #816128)

Utilizator avatar LMariaL Maria Loghin LMariaL IP ascuns
Problemă Cristela (clasele 9-12) Compilator cpp-32 | 1,02 kb
Rundă Arhiva de probleme Status evaluat
Dată 25 mar. 2025 19:16:15 Scor 100
#include "bits/stdc++.h"
#define int long long int
const int M = 20, SIZE = (1 << M);
int f[SIZE], dp_arr[SIZE];
void Solve(){
  int n;
  std :: cin >> n;
  for(int i = 0; i < SIZE; i++){
    f[i] = 0;
    dp_arr[i] = 0;
  }
  for(int i = 1; i <= n; i++){
    std :: string s;
    std :: cin >> s;
    int mask = 0;
    for(char c : s){
      mask |= (1 << (c - 'a'));
    }
    f[mask]++;
  }
  for(int mask = 0; mask < SIZE; mask++){
    dp_arr[mask] = f[mask];
  }
  for(int i = 0; i < M; i++){
    for(int mask = 0; mask < SIZE; mask++){
      if(mask & (1 << i)){
        dp_arr[mask] += dp_arr[mask ^ (1 << i)];
      }
    }
  }
  int tot = n * (n - 1) / 2, sum = 0;
  int full = SIZE - 1;
  for(int mask = 0; mask < SIZE; mask++){
    sum += f[mask] * dp_arr[full ^ mask];
  }
  int disjoint = sum / 2;
  int ans = tot - disjoint;
  std :: cout << ans;
}
signed main(){
  std :: ios_base :: sync_with_stdio(false);
  std :: cin.tie(0);
  freopen("cristela.in", "r", stdin);
  freopen("cristela.out", "w", stdout);
  Solve();
  return 0;
}