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()]
d=[0]
w=set([0])
x=0
for i in range(n):
    if a[x]-1 not in w:
        d.append(a[x]-1)
        w.add(a[x]-1)
        x=a[x]-1
    else:
        f=a[x]-1
        break
 
if k<len(d):
    print(d[k]+1)
else:
    x=k-len(d)
    y=d.index(f)
    z=len(d)-y
    print(d[y+x%z]+1)

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

E問題以降はあとで