ABC185の感想.Python

お昼にあったJOIで散々な結果だったのでABCでリベンジしたかったが...

A - ABC Preparation

listで受けとって,min

from sys import stdin
input = stdin.readline

l = list(map(int, input().strip().split()))

print(min(l))

B - Smartphone Addiction

バグらせた.nと残充電量は別で持ちましょう.

from sys import stdin
input = stdin.readline

n, m, t = map(int, input().strip().split())
ab = [list(map(int, input().strip().split())) for _ in range(m)]

battery = n
battery -= ab[0][0]
if battery <= 0:
    print('No')
    quit()

battery = min(n, battery + ab[0][1] - ab[0][0])
for i in range(1, m):
    time = ab[i][0] - ab[i-1][1]
    charge = ab[i][1] - ab[i][0]
    battery -= time
    if battery <= 0:
        print('No')
        quit()
    else:
        battery = min(n, battery + charge)

if battery - (t - ab[-1][1]) <= 0:
    print('No')
else:
    print('Yes')

C - Duodecim Ferra

DPでいけると思ったけど,遷移式が立てれず...

D - Stamp

青色のマスを赤色にすることはできない.よって,隣接する青色のスタンプ同士の距離の最小値が kになるので,数える.そのときに,間にある白のマスの数を数えて,区間ごとに kで割って足す.

from sys import stdin
input = stdin.readline
inf = float('inf')

n, m = map(int, input().strip().split())
a = list(map(int, input().strip().split()))

if m == 0:
    print(1)
    quit()

a.sort()
if a[0] == 1:
    k = inf
    white = []
else:
    k = a[0] - 1
    white = [a[0] - 1]

for i in range(1, m):
    tmp = a[i] - a[i - 1] - 1
    white.append(tmp)
    if tmp != 0:
        k = min(tmp, k)

if a[-1] != n:
    white.append(n - a[-1])

ans = 0
length = len(white)
for i in range(length):
    if white[i] % k == 0:
        ans += white[i] // k
    else:
        ans += (white[i] // k) + 1

print(int(ans))

感想

Fはxorを知っていれば解けそう?