キーエンス プログラミング コンテスト 2021参加記(~C問題)
300-400(1)-500-0(1)-0-0で1ペナ3完1200点。
A - Two Sequences 2
全ての組を見るとかかりTLEする。
を求めるには、までの要素を見ればよい。さらにを求める際、数列からを選ぶか選ばないかで2通りに場合分けできる。
- を選ばない場合
このとき、という制約から、も選ぶことができない。つまりどちらの数列からも番目までの要素から選ぶことになり、この答えはに一致する。
- を選ぶ場合
このとき、からまでの要素のどれを選んでもよい。正の数同士の乗算なので、貪欲に最大値を選ぶのが最適である。
まとめると、からまでの要素の最大値をとおいて、
が答えとなる。一つ前の答えが必要なので前から順に計算していく。
計算量は、。
B - Mex Boxes
数列の中に、があるときこれらをすべて使って点を得られる。この時、もの中に含まれているなら、とすることで点得られる。一般に、点得るには個の数が必要なので、最高で点得ることが可能なら貪欲に個の数を使って点得た方が良い。
あとは、数列のなかにそれぞれの数が何個含まれているかをカウントし、数が大きい方から見て貪欲に作っていく。最高で回までしか得点を得られないことに気を付ける(1WA)。
計算量は、。
C - Robot on Grid
全てのマスに文字が書き込まれているなら、のDPで解くことができる。配るDPで書くと、
dp[i][j]:=(マス(i, j)に行く経路の数)
と定義して、マス(i, j)が右方向に進めるならdp[i][j+1]+=dp[i][j]
とすればよい。下方向も同じくdp[i+1][j]+=dp[i][j]
となる。最初のマス(1, 1)にいるロボットは体なので、dp[1][1]=1
である。
ここで、とおく(何も書かれていないマスの数を表す)。マスへの書き込み方は通りあるので、マス(1, 1)に体のロボットをおいて、すべてのロボットが異なる動きをすると仮定して考える。このとき、何も書かれていないマスに到達したロボットのうち、は「R」、は「D」、は「X」であり、右に進めるのはマスに「R」か「X」が書かれていた場合のみである。よって、動的計画法の遷移は
dp[i][j+1]+=dp[i][j] * 2 / 3
となる。下に進む場合も同様である。計算時は、常にMODを取って計算することを忘れないようにする。また、割り算のMODは逆元を用いて計算できる。
計算量は、。
感想
パァン!
👺< 実装が遅い!