競技プログラミング日記

主に AtCoder の記事です

2023-06-25から1日間の記事一覧

AtCoder Beginner Contest 246F

ABC246F 包除原理の基本を学ぶのに丁度良い問題.\(\cup_{i \in N} X_{i}\) の要素の個数を数える問題. \(\Lambda \subset N\) に対して, $$\cap_{i \in \Lambda} X_{i}$$ を高速に求められれば十分. 実装:使える文字の種類 \(\subset 26\) を高速に求め…

AtCoder Beginner Contest 251E

ABC251E Cycle DP. 最初を固定して考えて,1周してきたときに辻褄があっている物を採用する. 実装:\(-1 \,(mod N)\) 番目を固定した上で, \(for i \in N\) をループする. \(i = N-1\) のときに,最初に固定したものと一致するものを採用する. 使っている…

AtCoder Beginner Contest 232E

ABC232E 配るDP. 類別して状態をまとめる.遷移する際,今いるマスと次のマスそれぞに対して,(ゴールのマスと同じ行にいるか) \(\in 2\), (ゴールのマスと同じ列にいるか) \(\in 2\)の情報だけが重要. つまり,状態をまとめて減らすことができる.注意:行…

AtCoder Beginner Contest 307E

ABC307E Cycle DP. この問題のポイントは2つ. 最初を決め打って,一周したときに辻褄が合うようにする. 基本は line 型で考えて,最後だけ注意する.類題: ABC251E (記事) 状態をまとめること. \(0\) 番目を固定して \(i\) 番目を決めるときに,(\(0\) 番…

AtCoder Beginner Contest 307D

ABC307D 実装:愚直に実装する. 再帰で実装するより,for, while の方が楽.本番では沼らない様に,多少無駄でも素直な実装が安全. この問題なら, \begin{align} &for(c \in s) \\ &\ \ \ c \text{で場合分け} \end{align} とすれば,迷わなくて済む. 使…

AtCoder Beginner Contest 307B

ABC307B \(S[i]\)と\(S[j]\)の順番が異なるときに, 異なる文字列になることがある.文字列 \(t\) が回文である \(\iff\) 任意の \(i \in [0, \lfloor t.length()/2 \rfloor)\) に対して,\(t[i] = t[t.length()-1-i]\).\(i \in [0,t.length())\)でもよい. …