はじめに
AtCoder Beginner Contest 254の復習記事です。
記事におけるScanner
クラスは、自作の入力クラスです。
コンテスト
https://atcoder.jp/contests/abc254
問題A
文字列として入力を取り、文字列の後ろ2文字を表示します。
問題B
問題文に沿って実装をします。 これはパスカルの三角形、二項係数を表します。
問題C
A[i]
が入れ替え可能な位置として、A[i+K]
やA[i+k*2]
のようにi+Kの倍数
の何れかの値と入れ替えることができることがわかります。
そのため、i%K番目
のグループごとに値をソートし、数列B
のi
番目にi%K番目
のグループのi/K
番目の値を復元してできたものが、A
をソートしたものと一致かを判定します。
問題D
問題E
各クエリに対して、全ての頂点をメモしてDFSやBFSをしてしまうと、時間計算量がO(QM)
となってしまい、実行時間制限に間に合いません。
しかし、制約にグラフの各頂点の時数は3
以下であり、0<=k<=3
とあることから、クエリあたり最大でも距離が0
から3
の頂点の和1+3^1+3^2+3^3=1+3+9+27=40
しかないことがわかります。
そのため、訪れた頂点のみをHashSet
などで管理することで、実行時間制限に間に合わせることができます。