AtCoder Beginner Contest ABC435 解法メモ
文中で使用しているのは、PythonライクでAtCoderに最適な言語の1つNimです
ABC435
ABC435A - Triangular Number
解法
(1..N).toSeq.sumを出力すればよい
ACコード
ABC435B - No-Divisible Range
解法
問題文通りシミュレートすればよい
for l in 0..<N:
for r in l..<N:
として、
つまり、A[l..r].sumを
初めに、f=trueとしてから
for i in l..r:
if A[l..r].sum mod A[i]==0: f=false
として、f==trueのときに答えをカウントアップしていけばよい
ACコード
ABC435C - Domino
解法
問題文通りシミュレートしていけばよい
ドミノは間隔
倒せる一番右の位置
その位置より手前、
ACコード
メモ
題意の読み取りに時間がかかり、実装でもインデックスの処理に時間をかけてしまった
ABC435D - Reachability Query 2
解法
クエリ
はじめに、有向辺を逆に張ったグラフを用意し、
クエリ
最大でも頂点数しかフラグを付けないので、それでも充分に間に合う
ACコード
メモ
逆向きに有向辺を張るという考えもあったが、パスを生成して判断する、という考えに囚われてしまった
それでは計算が収まるはずがない
ABC435E - Cover query
解法
遅延セグメント木なら、クエリによってノードの状況を変化させながらも、全体の合計を出すことができる
しかし、
まず、すべての
次項との差の配列(1..n).toSeq.mapIt(c[it]-c[it-1])を
AC-Libraryで、opはa+b、mappingはx*f、compositionはf*gとすればよく、
0..<Qの
l=c.lowerBound(L[q])
r=c.lowerBound(R[q])
とすれば、
s.apply(l..<r,0)として、区間を黒く塗る、すなわち、区間の白の個数を
ACコード
メモ
半開区間にすることで、実装の見通しがここまでよくなるということがわからなかった
Discussion