AtCoder Beginner Contest ABC410 解法メモ

に公開

文中で使用しているのは、PythonライクでAtCoderに最適な言語の1つNimです

ABC410

ABC410A - G1

解法

K\leqq Aiとなる数を答えればよいので、
A.countIt(K<=it)とすればよい
ACコード

ABC410B - Reverse Proxy

解法

Xi=0である場合に対応するため、各箱にいくつボールが入っているかの配列cを用意し、管理していけばよい
Xi=0である場合は、c[c.minIndex]にボールが入る
Xiごとにどの箱にボールが入るか記録していけば、答えとなる
ACコード

ABC410C - Rotatable Array

解法

タイプ3のクエリで発生する配列要素の回転数dを管理すれば、実際にAの要素回転を処理する必要はない
クエリ3をd+=kとすれば、
クエリ1はA[(p-1+d) mod N]=xで、
クエリ2はA[(p-1+d) mod N]である
ACコード

ABC410D - XOR Shortest Walk

解法

各頂点での辺の重みのXORを持ちながら、頂点1からNまでの全探索をしていく
訪問済みかどうかの判定を、単なる頂点番号でなく、頂点番号とその時の辺の重みのXORのペアとすればよい(頂点倍加
頂点Nで到達できた辺の重みのXORの中で、最小値(なければ-1)を答えればよい
ACコード

メモ

閉路もあり得るが、XORだから2周以上はない、というのがキーになるのではないかという考えに固執し、TLEを続けてしまった

ABC410E - Battles in a Row

解法

体力、魔力とも制約が小さいため、
dp[i体目目のモンスターを倒したところ][そのときの体力値]=残り得る魔力の最大値
DPを考えれば、
体力を使った場合の
dp[i][j].max=dp[i-1][j+A]
と、魔力を使った場合の
dp[i][j].max=dp[i-1][j]-B
にわけて、更新していけばよい
dp[i][0]<0となったi-1(もしくは負にならずに最後まで倒せた場合のN)が答え
ACコード

メモ

DPだろうとは思いつつも、どう置けばよいかがわからない


反復学習にはmochiがおすすめ
全問入ったdeckはこちら

Discussion