Codeforces Round #554 (Div. 2)
なんとか青維持しました(1632→1677)
またしてもDが解けなかった(くやしい)
A - Neko Finds Grapes (500点)
問題: Problem - A - Codeforces
鍵と錠の偶奇だけが問題になるので、それぞれ偶数と奇数がいくつあるか数えてmin{偶鍵, 奇錠} + min{奇鍵, 偶錠}を出力してAC。。
拙解 (C++14): Submission #53228308 - Codeforces
B - Neko Performs Cat Furrier Transform (1000点)
問題: Problem - B - Codeforces
最上位ビットから見ていって0があれば反転して1を足し…というのを愚直に繰り返す。0が最下位ビットまで連続するケースに気を付けて、立っているビットの数が最上位ビットのindex(1-indexed)に一致すればそこで1を足さないで奇数回の操作でおしまい。この操作回数と反転するときのビットのindexを出力する。こうすれば操作回数は高々回になり、からを満たしてAC。。
拙解 (C++14): Submission #53237080 - Codeforces
C - Neko does Maths (1500点)
問題: Problem - C - Codeforces
を最小化する問題。まずはから、kをなるべく小さくしつつgcdを大きくしていくと良さそうなことが分かる。として一般性を失わず、またこのgcdをとおくと、とはいずれもgで割り切れてなので、kを相殺してaを移項し、とわかる。したがって、の約数がの候補となる。こうして列挙したそれぞれのに対して、が定まって、問題文にあるようにを求めて出力してAC。だがなので間に合う。
拙解 (C++14): Submission #53247753 - Codeforces
D - Neko and Aki's Prank (2000点)
問題: Problem - D - Codeforces
コンテスト中には解けなかった。
長さの括弧列全体からなるTrie木の辺をすべての辺がになるように塗っていく問題。すべての葉の深さがで一定なことと、対称性をもつことによって、
で、交互に塗るよう遷移して、根ノードの親は実際には存在しないことを考慮しつつの項をすべて足し合わせて、根ノードの子を塗るか塗らないか2通り試してAC。だがなので間に合う。
拙解 (C++14, コンテスト終了後): Submission #53264485 - Codeforces
E以降
見てません
まとめ
D問題が括弧列の+1,-1するやつを斜め45度に倒して階段状の格子路の経路問題に落とし込むのはうまいなと思いました