竸プロ精進記 ABC021 B 嘘つきの高橋くん Python 3

問題:https://atcoder.jp/contests/abc021/tasks/abc021_b

一見グラフを使う経路問題で難しそうに見えるのですが、実際にはサンプルケースの中で紹介されているNG事例を一つずつ言われた通りに対処すれば簡単に解ける問題です。

すなわち、経路として与えられる数列の中にダブりがないこと。そしてもう一つが出発地や終着地の番号が数列の中に含まれていないこと。この2つを満たしていればYESです。

コード例

N=int(input())
a,b=map(int,input().split())
K=int(input())
P=list(map(int,input().split()))
PP=set(P)
if len(PP)!=len(P):
    print('NO')
elif a in P:
    print('NO')
elif b in P:
    print('NO')
else:
    print('YES')

まずダブりが無いかチェックします。これにはsetを使うと便利です。listで受け取った数列をsetに変換するとダブりが自動的になくなります。listの状態とsetの状態とでそれぞれの長さをlenで取得し比べて差があればダブりあり。もし長さが変わらなければダブりなしです。

続いて、出発地と終着地が経路リストの中に含まれていないかそれぞれチェックすればOKです。あまり難しく考えず、問題文に書かれた通りに処理すれば良い、と言う基本を守れば簡単な問題でした。