CADDi 2018

C - Product and GCD

素因数分解、いや、10^12だからO(√P)だ。まあ素因数分解だけど、順番に見ていけばいい。ある素数がk個出てきたらk/n個使える。わりとすぐ解けたが、実装を素早くやることができない。まあガツガツ書いていく。N=1のケースを先に処理。AC。

D - Harlequin

見当もつかない。とりあえず解ける範囲を広げていく。全ての色が1個以下なら手番の勝ち。全ての色が2個以下のとき、その中でも1個の色がないときは2個ある色を取るしかないが?1色しか残ってないとき奇数なら手番の勝ち。1,1,1,1,2は手番の勝ち。1,1,1,1,偶数も。んー、1と2だけで構成されてるとき、いやあ複雑。じゃあ2,2のときは?ここで、全部の色が偶数で相手の手番なら相手と同じ取り方ができると気づく。全部偶数を相手に押し付けるには、奇数の色を取ればいい!解法がわかるまでめちゃくちゃ不安だった。運ゲーにしか思えないけど、辿り着く過程や速さで実力は出るよねー。

E - Negative Doubling

負の数と正の数の境目がどこになるか、N+1通りのどれか。O(N^2)でいいなら解けたかな?とりあえず、-2倍ではなく4倍のケースを考えてみる。んー、シミュレーションすると2^200000とかになるのでは。でもシミュレーションできるならそれを累積和として使うことでできそう!ここで、浮動小数点数のstructを作る。正規化の仕方に悩んだが、Aが1<<30未満なので、1<<29のビットが立つまで左シフトして仮数を持てばいい。比較とコンストラクタも書く。負の数はreverseしてコピペ処理(焦る気持ちはわかるが関数にしろよ)。全部負の数にするメリットはない(最後の数は操作をしなくていい)のでループはN回。累積和のどこを見ればいいか複雑でわからず時間を食う。解けそうなのですごいドキドキしててオーバーヒート気味(体調は悪くない)。サンプルが合わず、デバッグしているうちに、勘違いに気づく。A[i]とA[i+1]で後者のほうがうんと大きいとき、それまでの経路によってその大きさのマージンが使えたり使えなかったりする。累積和じゃない。しかも、これ累積和だとしても累積和の累積和みたいなの計算しないとダメじゃん。合わないわけだ。負にならない累積和を考えるが、色々考えるが、心が動かない。端は決まってるので累積和ほど強い性質を持ってなくてもいいんだよなあ。そもそも、浮動小数点数要るかなあ。1足してくだけな気も。でも両方からだし要るかな。セグ木で最小値を見る?わからない。反対から見るといい性質が、わからない。これは時間捌けたっていうんか。思いつけばいける領域な可能性もあるが、心が動かないからどうしようもない。さすがに息を吹きかけただけで倒せる問題じゃないので、心が動いてその示す方向へそれなりに鋭くノミを打ち付ける必要がある。気分転換にFを読んだりして、正方形が対角線上と気づかず意味がわからなかったりした。結局、全く解けないままだ。