ABC072 C - Together
この問題について自分のコードだとテストサンプルのうち1つだけWAになってしまいます.どこが間違っているのかを教えてほしいです.
コード
Python
1import numpy as np 2 3n = int(input()) 4a = np.array(list(map(int, input().split()))) 5 6a = np.sort(a) 7 8max_num = 0 9p = 0 10 11while n - p >= max_num: 12 num = 0 13 a -= a[p] 14 while p < n and a[p] <= 2: 15 num += 1 16 p += 1 17 if num > max_num: 18 max_num = num 19 20print(max_num)
各変数の説明
n : 数列の数
a : 数列
max_num : a_i = x となる数の最大値でこの問題の返り値.
p : 現在着目しているaのインデックス.詳細は後述.
num : 各ループごとのa_i = x となる数.
アルゴリズム
ある数を基準にしてその数を数列のすべての数から引いたとき,0, 1, 2 となる要素の数が操作後にa_i = x となる数だからその最大値を探すというのが基本的な考え方です.
- n, a のインプット.後で要素全体の減算を行うためndarrayを使用.事前に降順にソートしておく.
- 以下whileループ内の説明.まず数列のすべての数から数列の最小値の値を引きます.はじめはa[p]=a[0]が最小値なのでa[p]の値を引いています.
- 2つ目のwhileループ内の説明.2の操作後,aの先頭から要素の値が0, 1, 2である数をカウントし,numに保存します.ここでpは着目しているaのインデックスを表していてa[p]が0, 1, 2 であればインデックスを一つ進め,numを1増やします.a[p]>2となるまで同様に繰り返し,a[p]>2となったタイミングでのnumがそのループでのa_i = x となる数です.
- numがmax_num よりも大きかったらmax_num を更新し,2, 3を繰り返します.最終的なmax_num が答えとなります.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。