ABC-D 79-86
実装する段階になって読み間違いに気づくことがしばしば。
それでも一応86以外は自力で解けたので良い傾向。
79
各数字について、最小コストの遷移を決めてやればいい。
ワーシャルフロイドでok.
80
si-0.5 -tiが最も多く重複する区間の重複度。
imos[10^5][30]
81
値が正なら、左の数字を右に足していけばいい。
負の時は?
左をより小さくすればいいので、右を左に足す。
後者によって前者で作った関係が壊れうる。
うるのでもう一周で2N回
最初のN回で符号を揃えてしまえばいい。
負に揃ったら右から、正に揃ったら左から処理でok
82
TとTの間のFを数える。
0回目と1回目の間、2回目と3回目の間、、、、を数えると、x方向に進めるパターンはそれらの和or差の組み合わせで全て生成される。setで管理。
最後の移動を処理するために、末尾に'T'を追加しておく。
83
n-1回でできるのは、一番左、一番右を好きな数にすること。
Kの場合、左右からn-K番目までは自由にできる。
よって問題は、それらの中間がどうなっているか。
数列の中心から見ていって、異なる数字が出るまでどれだけ広げられるか。
.....011111.....の場合、 ...0 1111 1...と分割。n-K=(n-4)/2
...0111111...で...0 11111 1....の場合も、n-K=(n-5)/2
84
10^5以下の奇数全てについてあらかじめ調べておいて、条件を満たすものをソートして格納した配列を作る。あとは各クエリに対して二分探索していくつ含まれるか計算。
85
振るのは最大のaiのもののみでいい。
そのaiをどのタイミングで投げるか。
bj>aiは投げて良い。ただし、biを投げることで回数が減るなら処理が必要。
bj全て投げで終わるなら、大きいものから。
終わらないなら、aiで適正回数殴ってから投げる。
ai殴りでHがbjの総和以下になったら投げに移行する。投げる順番はbjの大きい方から。
86
N 3^2だから全部試せばいいと思って書いている途中にN K^2と気づく。
O(N K^2)から落とす方法がいまいちわからず断念。
二次元累積和 https://img.atcoder.jp/arc089/editorial.pdf