公式

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")

投稿日時:
最終更新: