雑多なことを書き連ねていくブログ

今までの人生、色々と興味を持ってやってきた目線で森羅万象に言及したり、

ビット演算

ABC100

D - Patisserie ABC

ビット演算使えるとかっこいい問題。

int main(){

  ll n, m, a[100009][3], maxn=-(1LL<<60);
  cin >> n >> m;
  for(int i=1; i<=n; i++){
    for(int j=0; j<3; j++){
      cin >> a[i][j];
    }
  }
  for(int i=0; i<8; i++){
    vector<ll> vec;
    for(int j=1; j<=n; j++){
      ll s=0;
      for(int k=0; k<3; k++){
        if( (i/(1<<k) )%2==0){
          s+=a[j][k];
        } else {
          s-=a[j][k];
        }
      }
      vec.push_back(s);
    }
    sort(vec.begin(), vec.end());
    reverse(vec.begin(), vec.end());
    ll ans=0;
    for(int j=0; j<m; j++){
      ans+=vec[j];
    }
    maxn=max(maxn, ans);
  }
  cout << maxn << endl;

  return 0;
}