AtCoder Beginner Contest ABC412 解法メモ
文中で使用しているのは、PythonライクでAtCoderに最適な言語の1つNimです
ABC412
ABC412A - Task Failed Successfully
解法
(0..<N).toSeq.countIt(Ai<Bi)
ACコード
ABC412B - Precondition
解法
(1..<S.len).toSeq.allIt(S[it].isLowerAscii or (S[it].isUpperAscii and S[it-1] in T))
評価は
ACコード
ABC412C - Giant Domino
解法
着目しているドミノで最後のドミノが倒せるかを判定、
駄目なら、着目しているドミノの大きさの倍以下で最大の大きさのドミノを貪欲に選択し続けていけばよい
間にある
着目するドミノの大きさをhとし、初期値として左端のドミノの大きさS[0]とする
答えである使うドミノの個数を
以下を繰り返していけばよい
・h*2>=S[^1]であれば、右端のドミノ分の
・次のドミノs[i](
・
ACコード
メモ
while内の条件不足で無限ループを作ってTLEしているのに、計算量過多と誤認して無駄な考察を繰り返した
ACコード
ABC412D - Make 2-Regular Graph
解法
頂点数が高々
その完成形に対して、すべての頂点の組み合わせを列挙し、与えられた辺との差分をとればよい
具体的には、
①最初と最後を繋ぐ(連結成分
②
②
または、
②
または、
または、
の各々の辺の集合
((e-s)+(s-e)).lenの最小値が答え
ACコード
メモ
グラフでの解決にこだわり過ぎた
ABC412E - LCM Sequence
解法
出力例
同じ、ということは、新たに加わる数がそれまでの素因数分解の組み合わせの範囲内で表現できるということで、逆に増えるタイミングというのは、素因数分解の指数の上限が上がるか、新たな素数が加わるタイミングだといえる
そのタイミングとは、素数冪(
これはいわゆる区間篩で、通常のエラトステネスの篩同様、
(
列挙した素数
もちろん、
篩にかける際、並行して
ACコード
メモ
区間内の素数冪の数を求める問題、との言い換えができない
区間篩という実装の工夫を知らない
Discussion