公式
B - Split Ticketing 解説
by
B - Split Ticketing 解説
by
vwxyz
原案:vwxyz
問題文の条件を全ての \(a,b,c\) について愚直に調べればよいです。
①答えに対応する文字型変数に最初 No を代入し、条件を満たすものがあれば Yes に変更して最後に出力する
②答えに対応するbool型変数に false を代入し、条件を満たすものがあれば true に変更して、最後に場合分けして答えを出力する
③条件を満たすものがあれば Yes を出力してプログラムを終了し、最後に No を出力する
などの方法があります。
それぞれにメリットとデメリットがあるので、問題や状況に応じて実装方針を適切に選べるように、いろんな書き方を引き出しとして持っておくとよいです。
Pythonではbreakとelseを組み合わせる方法もありますが、今回のように 3 重ループ内で使う場合は実装が直感的ではなくなる場合があり、あまりおすすめはできません。(一応、④として実装例を載せておきます。)
Pythonの実装例①
N=int(input())
C=[[None]*(i+1)+list(map(int,input().split())) for i in range(N-1)]
ans="No"
for a in range(N):
for b in range(a+1,N):
for c in range(b+1,N):
if C[a][b]+C[b][c]<C[a][c]:
ans="Yes"
print(ans)
Pythonの実装例②
N=int(input())
C=[[None]*(i+1)+list(map(int,input().split())) for i in range(N-1)]
bl=False
for a in range(N):
for b in range(a+1,N):
for c in range(b+1,N):
if C[a][b]+C[b][c]<C[a][c]:
bl=True
if bl:
print("Yes")
else:
print("No")
Pythonの実装例③
N=int(input())
C=[[None]*(i+1)+list(map(int,input().split())) for i in range(N-1)]
for a in range(N):
for b in range(a+1,N):
for c in range(b+1,N):
if C[a][b]+C[b][c]<C[a][c]:
print("Yes")
exit()
print("No")
Pythonの実装例④
N=int(input())
C=[[None]*(i+1)+list(map(int,input().split())) for i in range(N-1)]
ans="No"
for a in range(N):
for b in range(a+1,N):
for c in range(b+1,N):
if C[a][b]+C[b][c]<C[a][c]:
print("Yes")
break
else:
continue
break
else:
continue
break
else:
print("No")
投稿日時:
最終更新:
