AtCoder Beginner Contest 189参加記(~E問題)
DP回
100-200-0-400-500-0で0ペナ4完1200点。
B - Alcoholic
番目のお酒を飲んだ時のアルコールの摂取量は、 ml で求められる。番目から番目までのお酒をすべて飲んだ時のアルコールの摂取量を計算していき、初めてを超えたときのが答えである。で割ると誤差が出て怖いので、をで割るかわりにを倍すると整数のまま計算できる。
計算量は、。
C - Mandarin Orange
解けなかった。いや、解けてたんだけど制約を見て解は通らないと判断して書かなかった(いいわけ)。
を決めたとき、区間の最小値をとすれば、各皿ごとに個のみかんを食べることができる。を固定して考えたとき、を増やしたときの最小値はで更新できる。すべてのについて全探索して最大値を求めると、計算量はとなる。
実はこの問題は「ヒストグラムの最大長方形」の面積を求める問題に帰着できて(というかそのまま)、DPを使うことでで解けるらしい。へ~
D - Logical Expression
DP。
という感じの式を考える(ただし前から順に評価していく)。回目の計算が終わった時点での答えはTrue
かFalse
のどちらかである。それぞれの答えとなるような変数の割り当て型の個数をそれぞれとすると、回目の計算が終わった時点での答えも計算できる。
計算量は、。は、答えがオーバーフローしないための制約らしい。
E - Rotate and Flip
とりあえず、点を回転させたり線対称な位置に移動させたりする更新を式で表す。
- 時計回りに度回す
- 反時計回りに度回す
- を軸に対称移動させる
- を軸に対称移動させる
これらの式を眺めてみると、点の位置の更新は
という式で表せることがわかる。さらに、これらの更新する式は重ねることができる。の更新をする式を関数と見ると、関数の合成は次のように表せる。
式を整理して
とすれば、関数の合成をと一つの関数と見ることができる!(なげえ)
つまり、回目の操作から回目の操作までの関数の合成を累積和的な感じで計算しておけば、複数回の点の操作をで求めることができる。よって、各クエリにで答えることができる。
計算量は、。入力を受け取るのがボトルネック。
F - Sugoroku2
期待値、わからない
感想
簡単な処理なら10^8回の計算は1秒以内にできます