atCoderのabc088をやったのでメモ
(https://atcoder.jp/contests/abc088)
A問題
剰余をとってA以下なら支払い可能、そうでなければ支払い不可能
5分くらいでできた
N = int(input())
A = int(input())
surplus = N % 500
if surplus <= A:
print("Yes")
else:
print("No")
B問題
入力を受け取ってソートすれば順番に取り出してインクリメントしていくだけ
pythonのlist.sort()だと返り値がないところに戸惑って時間がかかった
10分くらい
N = int(input())
A = sorted(list(map(int, input().split())), reverse=True)
score_alice = 0
score_bob = 0
for i in range(N):
if i % 2 == 0:
score_alice += A[i]
else:
score_bob += A[i]
print(score_alice - score_bob)
C問題
最近解いたばかりなので割愛
D問題
BFSの典型題
ゴールできない場合の出力処理の書き忘れになかなか気づけず時間がかかった
20分くらい
from collections import deque
H, W = list(map(int, input().split()))
S = []
for i in range(H):
S.append(input())
dist = []
for i in range(H):
dist.append([-1] * W)
Q = deque()
dist[0][0] = 0
Q.append([0, 0])
while len(Q) > 0:
i, j = Q.popleft()
for i2, j2 in [[i - 1, j], [i + 1, j], [i, j + 1], [i, j - 1]]:
if not (0 <= i2 <= H - 1 and 0 <= j2 <= W - 1):
continue
elif S[i2][j2] == "#":
continue
else:
if dist[i2][j2] == -1:
dist[i2][j2] = dist[i][j] + 1
Q.append([i2, j2])
init_count = 0
for i in range(H):
for j in range(W):
if S[i][j] == "#":
init_count += 1
if dist[H - 1][W - 1] == -1:
score = -1
else:
score = H * W - init_count - (dist[H - 1][W - 1] + 1)
print(score)
まとめ
考え方の部分は詰まらず解けた。実装で手間取る部分が多いので練習あるのみかなと思う。
もうちょい難しいのにチャレンジしてもいいのかも。
動的計画法を実装する練習がしたかったが、今週末は風邪をひいてあまりコードが書けなかった。
来週はやろうかな
以上