👻
AtCoder キーエンス プログラミング コンテスト 2021 個人的メモ
所感
ab2完
bでバグに気づかずに2wa
A - Two Sequences 2
この中で最も大きいのは,明らかに最も大きい
だから,
こうすれば各
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
ans = [0]
a_max = 0
for a, b in zip(A, B):
a_max = max(a_max, a)
ans.append(max(ans[-1], a_max * b))
print(*ans[1:], sep="\n")
B - Mex Boxes
サンプル3の場合は図の様に詰めれば良さそう
なので,0から順に
今,
つまり,全ての箱の蓋の数
整数
-
a_i\geqq K
全ての箱に整数 のボールを入れることができ,全ての箱でi になるx=i+1
余ったボールは考慮不要なので,適当に詰めたとする -
a_i\leqq K
個の箱にのみ整数a_i のボールを入れることができ,それらのi 個の箱がa_i になるx=i+1
一方で整数 のボールが入らなかったi 個の箱はK-a_i のままであるx=i
そしてこれらのボールが入らなかった箱の はこれ以上大きくならないx
従って,これらの箱は以降考慮する必要が無いので となるK=a_i
よって,以上の操作を
ループ内最後のボールの個数を変える箇所をバグらせてた
from collections import Counter
N, K = map(int, input().split())
A = list(map(int, input().split()))
cnt = Counter(A)
ans = 0
num_ball = K
for i in range(N + 1):
if num_ball <= cnt[i]:
continue
if cnt[i] == 0:
ans += num_ball * i
break
ans += (num_ball - cnt[i]) * i
num_ball = cnt[i]
print(ans)
C - Robot on Grid
解説ac
https://atcoder.jp/contests/keyence2021/editorial/564
配るDPで考える
ロボットがあるマスから移動することを考える
マスに書いてある文字によって以下の4つに場合分けできる
- Xと書いてある場合
右か下に移動する - Dと書いてある場合
下に移動する - Rと書いてある場合
右に移動する - 書いてない場合
↑3つのいずれかを書き込む
つまり,3通りの内2通りの場合(XかR)で右に移動し,3通りの内2通りの場合(XかD)で下に移動する
これを再帰的に解けば,解を得られそう
H, W, K = map(int, input().split())
grid = [[""] * W for _ in range(H)]
for _ in range(K):
h, w, c = input().split()
grid[int(h) - 1][int(w) - 1] = c
MOD = 998244353
dp = [[0] * (W + 1) for _ in range(H + 1)]
dp[0][0] = 1
three_inverse = pow(3, MOD - 2, MOD)
for i in range(H):
for j in range(W):
dp[i][j] %= MOD
num = dp[i][j]
command = grid[i][j]
if command == "X":
dp[i + 1][j] += num
dp[i][j + 1] += num
elif command == "D":
dp[i + 1][j] += num
elif command == "R":
dp[i][j + 1] += num
elif command == "":
num *= three_inverse * 2
num %= MOD
dp[i + 1][j] += num
dp[i][j + 1] += num
print(dp[H - 1][W - 1] * pow(3, H * W - K, MOD) % MOD)
Discussion