AtCoder
問題リンク
https://atcoder.jp/contests/abc419/tasks/abc419_f
問題概要
長さ $L$ の英小文字列であって、$S_1,S_2,\dots,S_N$ をすべて部分文字列として含むものの個数を数え上げよ。
制約
- $1\le N\le 8$
- $1\le L\le 100$
- $N,L$ は整数
- $1\le |S_i|\le 10$, 英小文字からなる文字列
- $S_i\ne S_j\ (i\ne j)$
解法
素直に DP する。ここで、各文字列が既に部分文字列として含まれているか ($O(2^N)$ 通り)、およびその文字列の suffix が重なる最長の prefix が状態になる。各文字列の prefix は $M=\sum_i |S_i|$ 個で、DP は全体で $O(2^NML\sigma)$ で動く (ただし $\sigma=26$)。
…2023 年の AtCoder 言語アップデートで新しく使えるようになった C# の機能について、競技プログラミングの観点で使えそうなものをピックアップします。
Native AOT
新しいコンパイル方式で、ネイティブのバイナリに変換してくれます。理論上 C++ 並みの実行速度を期待できるので、 C#er にとってはこの上ない福音でしょう。
問題にもよりますが、C++ と C# (JIT) の間くらいの実行時間になります。もちろん、旧来のコンパイル方式 (JIT) も利用可能です。
…C# は仕様や機能が比較的モダン [要出典] ながらも、その歴史とともに多くの仕様を追加して増築を繰り返してきた言語です。
また、仕様が大きく異なる多様な処理系が存在したり言語仕様が昔の処理系では非常に不便だったりします。
そのため、コーディングの感覚が実行環境によって比較的左右されやすい言語です。
…公式解説と全然違うことをしている……。
問題リンク
https://atcoder.jp/contests/agc027/tasks/agc027_d
問題概要
$N$ が与えられます。次のような $N \times N$ 行列 $a$ を構築してください。
- $1\le a_{ij}\le 10^{15}$
- $a_{ij}$ は distinct
- 隣接する要素 $x, y$ について、$\max(x,y) \% \min(x,y)$ の値は正かつ全て同じ
制約
- $2\le N \le 500$
エスパーです。正直こっちのほうが分かりやすいです。
厳密ではありませんが証明はちゃんとつけました。
問題リンク
https://atcoder.jp/contests/arc129/tasks/arc129_d
問題概要
長さ $N$ の整数列 $(A_1, \dots, A_N)$ があります。この整数列の両端は繋がっています。
$A_{i-1}, A_i, A_{i+1}$ にそれぞれ $-1,2,-1$ を何回か足すことによって $A_i$ を全て $0$ にできるか判定し、できるなら最小回数を求めて下さい。
制約
- $3\le N\le 200000$
- $-100\le A_i \le 100$
- 入力は全て整数
お久しぶりです。
計算機プログラミングの授業でこの問題の解説をしたので、普段の解説記事とは違う形式ですがそのスライドを公開しようと思います (教員には許可を取っております)。
最近競技プログラミングを休んでいたのでかなりお久しぶりになっていました。ABC どころか Rated も出ていない……。
ゆっくりのんびり、余裕のある程度にまたやろうかなと思います。
…なんか全然公式解説と違うことしてました……。
問題リンク
https://atcoder.jp/contests/arc046/tasks/arc046_d
問題概要
$H$ 行 $W$ 列からなるグリッドグラフがあります。
このグラフにおいて、$(i,j)$ から $((i+1) \bmod H, j)$ または $(i,(j+1) \bmod W)$ に移動できます。
マス $(0,0)$ からスタートして全てのマスを通り、$(0,0)$ に戻ってくるような経路の数を $\bmod 10^9+7$ で数え上げてください。
制約
$1\le H,W\le 10^6$
…問題リンク
https://atcoder.jp/contests/zone2021/tasks/zone2021_f
問題概要
$N=2^n$ 個の頂点 $0,1,2,\dots,N-1$ について、$N-1$ 個の辺 $(i,j)$ を張って全域木を構成したいです。ただし、$(i,j)$ について、$i\oplus j$ が $A_1,A_2,\dots,A_M$ のいずれかと一致するような辺 $(i,j)$ は張れません。
全域木が構成できるか判定し、出来る場合は構成の仕方を $1$ つ示してください。
制約
- $N=2^n$ として、$1\le n\le 18$
- $0\le M\le N-1$
- $0\lt A_1\lt A_2\lt\dots\lt A_M\lt N$
最近似た問題を見ていたのでその解説を見て難しい解法にハマりました。
Editorial と同じ解法と、自分の解法を両方紹介します。
問題リンク
https://atcoder.jp/contests/abc198/tasks/abc198_e
問題概要
$N$ 頂点の木が与えられます。頂点 $i$ は色 $C_i$ で塗られています。
頂点 $1$ から $x$ への最短パスに色 $C_x$ が頂点 $x$ 以外に現れないような頂点を良い頂点と呼びます。良い頂点を列挙してください。
制約
- $2\le N\le 10^5$
- $1\le C_i\le 10^5$
- 与えられるグラフは木