質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

700閲覧

コードの欠陥が分かりません

bluer

総合スコア16

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/05 14:53

Python3

1n,m = input().split() 2height = list(input().split()) 3list = [] 4for i in range(1,int(n)+1): 5 list.append(i) 6for i in range(int(m)): 7 a,b = input().split() 8 a = int(a) 9 b = int(b) 10 if int(height[a-1]) < int(height[b-1]): 11 if int(a) in list: 12 list.remove(a) 13 elif int(height[a-1]) > int(height[b-1]): 14 if int(b) in list: 15 list.remove(b) 16 elif int(height[a-1]) == int(height[b-1]): 17 if int(b) in list: 18 list.remove(b) 19 elif int(a) in list: 20 list.remove(a) 21print(len(list))

https://atcoder.jp/contests/abc166/tasks/abc166_c

Atcoderの問題で一つだけWAが出てしまうのですがどこが問題なのか分かりません。
もしわかる方がいらっしゃったら教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえず元のコードが読みづらかったので、同じロジックのまま直しました。

python

1# 修正点 2# ・list→lst 3# ・読み込み時にintに変換するのが常道なのでそうする 4# ・PEP8に準拠させる 5# 6# コメント 7# ・組み込みの名前と被る変数名を使ってはいけないのは有名な話:https://qiita.com/k-nakamura/items/e43338e0007d79316c02 8# ・無駄な記述を減らさないと見通しが悪くなります。型変換とか先に済ませましょう 9# ・a-1とか気持ち悪いので何かしらの工夫があるといいのかも 10# ・heightも本当はheightsの方が良い気がしますが、そこまでは直していません 11# ・このロジックでTLEにならないのかどうかは知らない。速くはなさそう 12 13n, m = map(int, input().split()) 14height = [int(x) for x in input().split()] 15lst = [] 16for i in range(1, n + 1): 17 lst.append(i) 18 19for i in range(m): 20 a, b = map(int, input().split()) 21 if height[a-1] < height[b-1]: 22 if a in lst: 23 lst.remove(a) 24 elif height[a-1] > height[b-1]: 25 if b in list: 26 lst.remove(b) 27 elif height[a-1] == height[b-1]: 28 if b in lst: 29 lst.remove(b) 30 elif a in lst: 31 lst.remove(a) 32 33print(len(lst)) 34

あー、これはあれですね、

python

1 elif height[a-1] == height[b-1]: 2 if b in lst: 3 lst.remove(b) 4 elif a in lst: 5 lst.remove(a) 6

ab両方消さないといけないのに、上が通った時点で下はelifなのでスルーされますね。ifに変えましょう。

投稿2020/05/05 15:11

編集2020/05/05 15:14
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bluer

2020/05/05 15:15

なるほど、elifだとそうなってしまうのですね。 アドバイスまで下さり本当に助かります。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問