361.1

250

白い帽子か黒い帽子のいずれかをかぶっている人達がいて、それぞれが自分以外に白い帽子をかぶっている人数を答える。白い帽子は全部あるか答えよという問題。矛盾する場合は-1を返す。


もし仮に誰かが白い帽子をかぶっているならば、人数-1だけ全員の答えの総和が増える、ということから、全員の合計を人数-1で割る。その数かその数-1以外のことを言う人がいなければその数が答え。という風にやるのが正解らしい。(頭が悪い解法で力技でも解けるけれど、知っている人がさっくり解いてしまうのに比べると遅い。)

500

ある数字からその数字を反転させた数字を引いた値が与えられるので、元の数字と思われるもので一番小さいものを答えよという問題。ない場合はNONEと返す。


差分の範囲が1000000までなので、有効な桁が8桁あれば十分。逆向きにした時に影響が出る部分を考慮すると-9から9までなので、2桁で20通りくらい試せば良い。先頭の桁は大きくし過ぎても意味がないので、0か1になる。


ただし差分が10の倍数の時は、10で割ったものに対して差分があるならば、それが答えになる。(これも有効な桁数は同じ。)先頭に10*を追加してその逆向きを後ろに追加すれば良い。


これをちゃんと書けば動くと思う。当たり前だけど、7桁でやったら不正解だった。

1000

おもりが複数与えられて、1:1で比較した時の関係が与えられる。重い、軽い、同じ、調べていない。おもりの重さは1,2,3のいずれか。ここで特定の二つのおもりが指定されて、それ以外のおもりのペア全部と比べた時に、重いもの、軽いもの、同じもの、はそれぞれいくつあるか答えよという問題。分からないものはカウントしない。


同じ重さのおもりをグループ化して、それぞれのおもりがどの重さの範囲にあるかを決める。これを収束するまで繰り返す。後はおもりのペアから計算しておしまい。という問題に見えなくもないけれど、実際には手を付けていないので不明。