結果

問題 No.130 XOR Minimax
ユーザー knewknowlknewknowl
提出日時 2015-02-09 15:07:49
言語 C++11
(gcc 11.4.0)
結果
MLE  
実行時間 -
コード長 1,280 bytes
コンパイル時間 378 ms
コンパイル使用メモリ 47,320 KB
実行使用メモリ 812,748 KB
最終ジャッジ日時 2023-09-05 20:45:29
合計ジャッジ時間 3,466 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 26 ms
4,376 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 1 ms
4,380 KB
testcase_03 AC 1 ms
4,380 KB
testcase_04 MLE -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

int n,m;
int a[100001];

void input(){
  scanf("%d",&n);
  for(int i=0;i<n;++i) scanf("%d",a+i);
}

int bitnum(int x){
  int b = x;
  int i = 0;
  while(b){
    b=b>>1;
    ++i;
  }
  return i;
}

int ibit(int idx,int num){
  return (num>>idx) & 1;
}

bool allsamebit(int idx,vector<int> ar){
  bool one = true,zero = true;
  int n = ar.size();
  for(int i=0;i<n;++i){
    if(ibit(idx,ar[i])) zero = false;
    else one = false;
  }
  return one||zero;
}
int calc(int idx,vector<int> ar){
  if(ar.size()==1) return 0;
  if(idx==0) return !allsamebit(idx,ar);
  //  printf("%d %d\n",idx,allsamebit(idx,ar));
  if(allsamebit(idx,ar)) return calc(idx-1,ar);
  else{
    vector<int> one,zero; //set of ith bit is 1/0
    int n = ar.size();
    for(int i=0;i<n;++i){
      if(ar[i]>>idx & 1) one.push_back(ar[i]);
      else zero.push_back(ar[i]);
    }
    //    printf("%d %d\n",calc(idx-1,one),calc(idx-1,zero));
    return (1<<idx) | min(calc(idx-1,one),calc(idx-1,zero));
  }
}

void solve(){
  m = 0;
  for(int i=0;i<n;++i){
    m = max(m,bitnum(a[i]));
  }
  vector<int> ar;
  for(int i=0;i<n;++i) ar.push_back(a[i]);
  printf("%d\n",calc(m-1,ar));
}

int main(){
  input();
  solve();
  return 0;
}
0