結果
問題 | No.130 XOR Minimax |
ユーザー |
![]() |
提出日時 | 2016-03-21 02:41:47 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 97 ms / 5,000 ms |
コード長 | 1,266 bytes |
コンパイル時間 | 773 ms |
コンパイル使用メモリ | 93,672 KB |
実行使用メモリ | 14,344 KB |
最終ジャッジ日時 | 2024-09-12 22:40:34 |
合計ジャッジ時間 | 2,839 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
/* -*- coding: utf-8 -*-** 130.cc: No.130 XOR Minimax - yukicoder*/#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<deque>#include<algorithm>#include<numeric>#include<utility>#include<complex>#include<functional>using namespace std;/* constant */const int MAX_N = 100000;const int MAX_B = 30;/* typedef */typedef vector<int> vi;typedef set<int> si;/* global variables *//* subroutines */int rec(int k, vi &v) {if (v.size() <= 1) return 0;int bk = 1 << k;vi v0, v1;for (vi::iterator vit = v.begin(); vit != v.end(); vit++) {if (*vit & bk) v1.push_back(*vit ^ bk);else v0.push_back(*vit);}if (v1.size() == 0) return rec(k - 1, v0);if (v0.size() == 0) return rec(k - 1, v1);int r0 = rec(k - 1, v0);int r1 = rec(k - 1, v1);return (bk | min(r0, r1));}/* main */int main() {int n;cin >> n;si sv;for (int i = 0; i < n; i++) {int ai;cin >> ai;sv.insert(ai);}vi v;for (si::iterator sit = sv.begin(); sit != sv.end(); sit++)v.push_back(*sit);printf("%d\n", rec(MAX_B - 1, v));return 0;}