morikomorou’s blog

自分が学んだことなどの備忘録的なやつ

【python】ABC443 A-D解法

はじめに

今回は3完でした。
なんかDでハマりました…。うまくいきませんね……




解法

A問題

A - Append s
これは単純に's'を足すだけですね。

s = input()
print(s + "s")

B問題

B - Setsubun
こちらも単純にkを超えるまで足し続けるだけです。計算量は事前に試して間に合いそうだったのでそのまま出しました。

n, k = map(int, input().split())
x = n
i = 0
while x < k:
    i += 1
    x += n + i
print(i)




C問題

C - Chokutter Addiction
Aを最初から見ていきながら次の閲覧開始時間との大小関係を確認していけばいいです。
最後に、終業時間Tと最後の閲覧開始時間を比較します

n, t = map(int, input().split())
a = list(map(int, input().split()))
ans = 0
nxt = 0 # 次の閲覧開始時間
for i in range(n):
    if a[i] >= nxt:
        ans += a[i] - nxt
        nxt = a[i] + 100
    else:
        continue
if len(a):
    if a[-1] != t and t >= nxt:
        ans += t - nxt
else:
    ans += t
print(ans)

D問題

D - Pawn Line
解説見ました。これ思いつくんでしょうか……

t = int(input())
for _ in range(t):
    n = int(input())
    r = list(map(int, input().split()))
    rcopy = r.copy()
    for i in range(1, n):
        r[i] = min(r[i], r[i - 1] + 1)
    for i in range(n - 1)[::-1]:
        r[i] = min(r[i], r[i + 1] + 1)
    cnt = 0
    for i in range(n):
        cnt += abs(r[i] - rcopy[i])
    print(cnt)

おわりに

緑色は遠いです。。。


最近鉄則本なる本を買って勉強し始めました。
フルカラーで見やすいし、説明もすごくわかりやすいし、知らないアルゴリズムもたくさん網羅されていてなかなか読み応えあります。力がつく気がします。