2020-08-05 ABC024 A, B, C
ABC024 A, B, C 考察
ABC024 A - 動物園
合計人数 (S + T) が K 以上なら S * (A - C) + T * (B - C) を K 未満なら S * A + T * B の入場料になる。
https://atcoder.jp/contests/abc024/submissions/15708840
ABC024 B - 自動ドア
ある人が来てから最長で T 秒開く。ただし次の人が T 秒経つ前に来た場合は次の人から T 秒しか開かない。つまり A_i と A_{i + 1} の間が T 秒以下なら A_{i + 1} - A_i 秒を合計に加算し T 秒を超えているなら T 秒を合計に加算していく。最後の A_N は次の人がいないので T 秒開くので合計に T を加算する。 O(N) で N <= 10^5 なので間に合う。
MIN(A_{i + 1} - A_i, T) を加算していけば良いと気づいたので書き直した。
https://atcoder.jp/contests/abc024/submissions/15709707
ABC024 C - 民族大移動
S_i < T_i ならその民族は → の街へ。 S_i > T_i ならその民族は ← の街へ移動していくと良い。移動できるタイミングはその民族のいま居る街を C_i とすると L_i <= C_i <= R_i のとき。移動できる先は ← は L_i まで → は R_i までだ。いまいる街 C_i と T_i に到達したときの日数 D_i を記録しておく。前から順に D 日を走査し日ごとにすべての民族 K 種類を走査して上記の移動を繰り返せば良い。 O(DK) で D <= 10^4 K <= 100 なので DK <= 10^6 となり間に合う。
https://atcoder.jp/contests/abc024/submissions/15709376
リングフィットアドベンチャーを続けている。