AtCoder Beginner Contest 079

はい。
https://atcoder.jp/contests/abc079

A - Good Integer

Python3

n=input()
print("Yes" if n[1]==n[2] and (n[0]==n[1] or n[3]==n[1])  else "No")

大真面目にWAした。。難問だった。。

B - Lucas Number

Python3

l=[2,1]
for i in range(85):
    l.append(l[-1]+l[-2])
n=int(input())
print(l[n])

作っておいてからN番目を出力すれば多分大丈夫。

C - Train Ticket

Python3

o=["+","-"]
a,b,c,d=list(input())
for i in o:
    for j in o:
        for k in o:
            t=a+i+b+j+c+k+d
            if eval(t)==7:
                print(t+"=7")
                exit()

C問題だけど全部試すようにして7になった時に出力して終了という感じで大丈夫だと思う。

D - Wall

Python3

def sol():
    h,w=map(int,input().split())
    c=[list(map(int,input().split())) for i in range(10)]
    a=[list(map(int,input().split())) for i in range(h)]
    for k in range(10):
        for i in range(10):
            for j in range(10):
                c[i][j]=min(c[i][j],c[i][k]+c[k][j])
    ans=0
    for i in range(h):
        for j in range(w):
            if a[i][j]==-1: pass
            else: ans+=c[a[i][j]][1]
    print(ans)
 
if __name__=="__main__":
    sol()

1以外の数から1にするのに最小魔力を調べておく。調べておいたらそれぞれのAのマスの値から1にする魔力を足していった和が解になる。
あらかじめ調べておくのは思いついたけども、ワーシャルフロイドを使うの解説読むまで気づかなかった。初回に自力でACしたのは移動前の数字をset型にいれておいて適当にループ回して移動先と移動前+移動する魔力を比較とかして調べました。
はい、任意の位置から移動する最小コストを〜はワーシャルフロイドを自然に思いついて試すようになりたいですね。