024号文書

主にプログラミング

ABC121 参加メモ

https://atcoder.jp/contests/abc121 1121->1214. 水色になりました! f:id:wotsushi:20190310005918p:plain

A

100点問題で最も難しく感じました。 列と行はどこでもよいと言っているので、全て端に寄せると考えれば (H - h) * (W - w) が解と直感的に分かります。

B

実装ゲーです。 内包表記が気持ちよかったです。

C

安いものから順に買うだけです。

D

Aが1以上だと考えるのがしんどそうなので、A>=1のとき、 f(A, B)=f(0, B) xor f(0, A-1) が成り立つことを利用しました。  f(0, x) (=zとおきます)は以下で求めました。

  • zを二進数展開したときの下1桁目: xを4で割った余りが1または2ならば、1です
  • zを二進数展開したときの下i桁目(i>=2): xの下i桁目が1、かつ、xの下1桁目が0ならば、1です

400点問題にしては簡単なほうだと思いました。 しかし、なぜか心が焦ってしまい、上記の法則を見つけるのに時間がかかってしまいました...