Advertisement
_rashed

SPOJ Kompiæi

Oct 14th, 2021
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #define ll long long
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int OO = 1e9;
  6. const double EPS = 1e-9;
  7.  
  8. ll cnt[1 << 15];
  9. bool found[10];
  10. ll ans = 0;
  11.  
  12. void add(int i = 0, int sum = 0) {
  13.     if(i == 10) {
  14.         if(sum != 0) {
  15.             cnt[sum]++;
  16.             //cout << "adding to " << sum << "\n";
  17.         }
  18.  
  19.     }
  20.     else {
  21.         add(i+1,sum);
  22.         if(found[i])
  23.             add(i+1,sum + (1 << i));
  24.     }
  25. }
  26.  
  27. void solve(int i = 0, int sum = 0, int taken = 0) {
  28.     if(i == 10) {
  29.         ll curr = (cnt[sum]*(cnt[sum]-1))/2;
  30.         ans += (taken%2 ? 1:-1)*curr;
  31.     }
  32.     else {
  33.         solve(i+1,sum,taken);
  34.         solve(i+1,sum + (1 << i), taken+1);
  35.     }
  36. }
  37.  
  38. int main()
  39. {
  40.     ios_base::sync_with_stdio(false);
  41.     cin.tie(NULL);
  42.     cout.tie(NULL);
  43.     int n;
  44.     cin >> n;
  45.     for(int i = 0; i < n; i++) {
  46.         string s;
  47.         cin >> s;
  48.         for(int k = 0; k < s.size(); k++) {
  49.             found[s[k]-'0'] = 1;
  50.         }
  51.         add();
  52.         for(int i = 0; i < 10; i++) {
  53.             found[i] = 0;
  54.         }
  55.     }
  56.     solve();
  57.     cout << ans << "\n";
  58.     return 0;
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement