s8pc_4_b
WAの嵐
bit探索で1を対象のビルとして左から順に探索するだけ。
1のビルの時しかpre_maxを更新していなかったので
N=3,K=4
a={1, 10000, 2, 3}
のようなテストケースを逃していて大量WA
あと最初はlong longも忘れてた
joi2008yo_e
問題だけ読んでほったらかしてたら急に解法が降ってきた。
例のごとく000...000 ~ 111...111までのbitでR列目をひっくり返した場合にどうなるかをC行に試す全探索を行う。
C行目は独自にひっくり返せれるのでmax(1のbit数, 0のbit数)を考えればよい。
すぐに分かったけどRとCがごっちゃになってWA出しまくった。。。
abc002_4
結構苦労した.
グループとなり得るパターンはn人をそれぞれbitのi番目に存在するか否かで考えると0000....000から1111....1111の2^nで表せれる
あとは適当な2人がグループのパターンに沿っている かつ 知り合いならばok
違うならngという感じで探していく
最大クリーク問題を求める問題を考えることと同じらしい
(無向グラフの中で最大な完全グラフを探し出す問題)
関係ないけれども完全グラフといえばヨビノリさんのこれが好き
abc128_c
電球M[i]に使うスイッチをビットで管理する
スイッチのON/OFF全パターンとM[i]のビットのマスクを取って1の数をカウント
カウントの剰余がP[i]と一致していればめでたく電球M[i]は点灯
そういえば今回は書かなかったけどビットカウントをするときは
for(int i=bit; i; i&=(i-1) ) cnt++;
ってやるとスマート
abc128_c
電球M[i]に使うスイッチをビットで管理する
スイッチのON/OFF全パターンとM[i]のビットのマスクを取って1の数をカウント
カウントの剰余がP[i]と一致していればめでたく電球M[i]は点灯
そういえば今回は書かなかったけどビットカウントをするときは
for( i=bit; i; i&=(i-1) ) cnt++;
ってやるとスマート
*1:i&s[j]
ALDS1_5_A
bit全探索
毎クエリ計算しているとTLEになるのでクエリの外で前計算してテーブルに持たせておいて,各クエリの処理はテーブルを参照する
クエリ処理は気をつけよう…(反省)
*1:i&(1<<j
joi2008yo_d
これと同じ感じ
気が付けば過去問精選100問の工夫して通り数を減らす全列挙まで終了