Guest User

FUNKVAL

a guest
Mar 31st, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define check(N, A, B) assert((int)(N) >= (int)(A) && (int)(N) <= (int)(B))
  3. using namespace std;
  4. const int maxn = 30;
  5. typedef long long ll;
  6. int a[maxn][maxn];
  7. int floor(int x){
  8.     int l = 0, r = x;
  9.     while(l < r){
  10.         int m = l+(r-l)/2;
  11.         if(m*m <= x) l = m+1;
  12.         else r = m;
  13.     }
  14.     if(l*l > x) l--;
  15.     return l;
  16. }
  17. int main(){
  18.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  19.    
  20.     int n, k; cin >> n;
  21.     check(n,1,28);
  22.     for(int i=0;i<n;i++)
  23.         for(int j=0;j<n;j++){
  24.             cin >> a[i][j];
  25.             check(a[i][j],0,1e6);
  26.         }
  27.  
  28.     for(int i=0;i<n;i++){
  29.         assert(a[i][i] == 0);
  30.         for(int j=0;j<n;j++)
  31.             assert(a[i][j] == a[j][i]);
  32.     }
  33.  
  34.     ll cur = 0, ans = 0;
  35.     for(int i=0;i<(1<<n);i++){
  36.         int msk = i^(i/2);
  37.         if(i == 0){
  38.             for(int j=0;j<n;j++)
  39.                 if(msk&(1<<j)) for(int k=0;k<j;k++)
  40.                     if(msk&(1<<k)) cur += a[j][k];
  41.             // cout << msk << ": " << cur << endl;
  42.         } else {
  43.             int prv = (i-1)^((i-1)/2);
  44.             int del = __builtin_ctz(prv^(msk));
  45.             int sgn = (msk&(1<<del))?1:-1;
  46.             for(int j=0;j<n;j++)
  47.                 if(j != del && (msk&(1<<j))){
  48.                     cur += sgn*a[j][del];
  49.                     // cout << "-> " << del << " " << j << " " << a[j][del] << endl;
  50.                 }
  51.             // cout << msk << ": " << del << " " << sgn << " " << cur << endl;
  52.         }
  53.         ans += cur * floor(__builtin_popcount(msk));
  54.     }
  55.     cout << ans << "\n";
  56. }
Add Comment
Please, Sign In to add comment