ABC230 参加記録
コンテスト中AC:A〜D
Eを解説ありで解きました。
A - AtCoder Quiz 3
公式解説より、setfillとsetwでleading zerosを実現できるらしいです。
B - Triple Metre
簡潔の判定方法が思いつきませんでしたが、公式解説のように、modの値で判定できるのですね。
C - X drawing
とします。
マスの座標からkを逆算してkが条件を満たすか考えます。マス(i,j)が黒となる条件は
1つ目が、
とが等しく、かつ、とした時にを満たす
と言い換えられます。
同様に2つ目は、
とが等しく、かつ、とした時にを満たす
と言い換えられます。
各マスについていずれか一方を満たせば黒となるので、これを各マスについて判定していけば良いです。
D - Destroyer Takahashi
類題を見たことがあるので、典型かと思います。
・今壊れていない壁の中で最もRが小さい壁について、Rでパンチする。
が最適な貪欲法です。
これが最適な理由は、
・これより後ろでパンチすると、この壁を壊せない。
・この壁を壊したい時、これより前でパンチするよりもRでパンチした方がより後ろの壁まで破壊できる。
ためです。
実装としては、
まず、壁を、Rをキーとして昇順にソートしておきます。
最後にしたパンチが届く範囲の最も右の列をxとし(便宜上初期値は0)、i番目の各壁について、
・ならその壁は既に破壊されているので何もしない。そうでなければ、でパンチし、と更新する。
としていけば良いです。
E - Fraction Floor Sum
Web公式解説を見ました。
説明のため、iに対応するをiのスコアと呼びます。
例えば、N = 16として、i=1〜Nと対応するスコアを並べてみます。
これを見るとで、スコアはとなっています。
このように、より大きいスコアは、対応するiが(おおよそ)くらいまでです。したがって、この時のスコアの合計はiを1から順に問題の通りスコアを計算していくことで、で求められます。
次に、以下のスコアは、スコアから対応するiの範囲を逆算することで、その合計をで求められます。
スコアkからiの範囲を逆算するときの計算は公式解説にもありますが、
となります。
まとめると、
スコアがより大きい部分はiから、
スコアが以下の部分はスコアから、
その合計を求められます。