Blog Article

ABC088をやってみた

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)


まとめ

考え方の部分は詰まらず解けた。実装で手間取る部分が多いので練習あるのみかなと思う。
もうちょい難しいのにチャレンジしてもいいのかも。
動的計画法を実装する練習がしたかったが、今週末は風邪をひいてあまりコードが書けなかった。
来週はやろうかな

以上

categories