AtCoder Beginner Contest ABC403 解法メモ
文中で使用しているのは、PythonライクでAtCoderに最適な言語の1つNimです
ABC403
ABC403A - Odd Position Sum
解法
(0..<N).toSeq.filterIt(it mod 2==0).mapIt(A[it]).sumでよい
ACコード
ABC403B - Four Hidden
解法
0..T.len-U.lenの
(0..<U.len).toSeq.allIt(T[i+it]==U[it] or T[i+it]=='?')が成立するかみればよい
ACコード
ABC403C - 403 Forbidden
解法
各ユーザー毎に、
- クエリ
で閲覧権限を与えられたコンテストページの番号を格納するHashSet1 - クエリ
で閲覧権限を与えられたかのbool2
を保持し、
クエリ
HashSetにその番号があるか、そもそも、全ページの閲覧権限があるか
を確認すればよい
ACコード
ABC403D - Forbidden Difference
解法
各
それを間隔
数字が並ばないように削除することを考える
これは
各々の配列に対し、その項を削除するかどうかのDPを行えばよい
dp[数列の
とすると、
d[i]=min(
(
となる
実装としては、
単にc=A.toCountTableとして、
また、n=10^6 div Dとして、
for i in 0..<D:
for j in 0..n:
の中で、
d[j]=min(dp[j-1]+c[D*j+i],dp[j-2]+c[D*(j-1)+i])
を遷移させていけばよい
答えは、各
ただし、
ACコード
メモ
当初、
AのCountTableのkeysから、
間隔
各々の中で連続しないように削除していくことを考え、
各
できたgroupsの各々をソートした数列に対し、
「削除しないで残すこと」が
DPで、
dp[数列の
として、
dp[i][0]=dp[i-1][1]
dp[i][1]=dp[i-1].min+(
の遷移を進め、
全groups数列のdp[^1].minの合計を求めた
ABC403E - Forbidden Prefix
解法
入力をすべて先読みし、
答えとなる数列
各
していく
最後、
ACコード
Discussion