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型にいれておいて適当にループ回して移動先と移動前+移動する魔力を比較とかして調べました。
はい、任意の位置から移動する最小コストを〜はワーシャルフロイドを自然に思いついて試すようになりたいですね。