SRM723Div1Easy TopXorer
概要
要素数nの配列xが与えられる。
に対してを満たすような配列aに対して
の最大値を求めよ
解法
基本的に最大の数の最上位bitを1にして、残った数でそれ以下のbitを1にしていくみたいな気持ち。例えば1100,0100があれば1100->1100,0100->0011にすれば排他的論理和は1111になって最大。
これをするために、左のbitから確定していき、もし左からi番目のbitが1である要素がxに複数あった場合は1つをi番目のbitを1にし、別の要素をi番目のbitを0にしてi+1番目以降を全て1にすれば排他的論理和が最大になる
class TopXorer { public: int maximalRating(vector <int> x) { // x[i] <= 10^9 int n = x.size(); // n <= 50 sort(all(x)); reverse(all(x)); vector<int> cnt(40,0); for(int i=0;i<n;i++){ rep(j,31) if(x[i] & (1 << j)) cnt[j]++; } for(int i=31;i>=0;i--){ if(cnt[i] > 1){ cnt[i]--; for(int j=0;j<i;j++){ cnt[j]++; } break; } } int ans = 0; for(int i=0;i<32;i++){ if(cnt[i] > 0) ans |= (1 << i); } //rep(i,n){ // cout << x[i] << "\t" << static_cast<bitset<11>>(x[i]) << endl; //} return ans; } };
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?
- 作者: 秋葉拓哉,岩田陽一,北川宜稔
- 出版社/メーカー: マイナビ
- 発売日: 2012/01/28
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 473回
- この商品を含むブログ (35件) を見る
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
- 作者: 渡部有隆,Ozy(協力),秋葉拓哉(協力)
- 出版社/メーカー: マイナビ
- 発売日: 2015/01/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド
- 作者: 高橋直大
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/08/14
- メディア: Kindle版
- この商品を含むブログを見る