AtCoder Beginner Contest 167

はい。
https://atcoder.jp/contests/abc167
oooo-- 917(-3) D問題まで。久しぶりだったのでこんなものでしょう。

A - Registration

PyPy3

s=input()
t=input()
print("Yes" if s+t[-1]==t else "No")

T.replace(S,"")とかで比較して提出しそうになったけどa,aaとかの場合に非常に都合が悪いことに気づいて方針変更してAC。

B - Easy Linear Programming

PyPy3

a,b,c,k=map(int,input().split())
ans=0
ans+=1*min(a,k)
k=max(0,k-a)
k=max(0,k-b)
ans+=-1*k
print(ans)

ABCの順に使えばいいと思う。それをforで処理しようとしたけど上手い書き方が出てきませんでした。1ステップずつごりごり書いてAC。

C - Skill Up

PyPy3

mod=1000000007
n,m,x=map(int,input().split())
w=[]
for i in range(n):
    w.append([int(i) for i in input().split()])
ans=mod
for i in range(2**n):
    d=0
    chk=[0]*m
    for j in range(n):
        if (i>>j&1):
            d+=w[j][0]
            for k in range(m):
                chk[k]+=w[j][k+1]
 
    if min(chk)>=x:
        ans=min(ans,d)

print(ans if ans!=mod else -1)

全部調べる。理解度が足りない場合に-1にするのを忘れて無駄にWA。

D - Teleporter

PyPy3

n,k=map(int,input().split())
a=[int(i) for i in input().split()]
w=[1]
x=set([1])
for i in range(k):
    t=a[w[-1]-1]
    if t in x: break
    x.add(t)
    w.append(t)
p=w.index(t)
k-=p
loop=len(w)-p
print(w[p+k%loop])

方針はすぐたったのですが方針通りに書けず。。町の数よりもわがままテレポート回数の方が多いので移動がループになる箇所が必ずあるはず。町1スタートしてループ開始する区間を探す。サンプル1は町1からループする。サンプル2は進んだ先の町2がループ開始かな、多分。

E問題以降はあとで