221.センサ


質問リンク


221.センサ

問題コード

sensor  = int(input())
center = int(input())

center_list = list(map(int,input().split()))

if center >= sensor:
    print(0)
else:
    center_set = set(center_list)
    center_list = list(center_set)

    center_list.sort()
    diff = []
    diff_total = 0
    for i in range(len(center_list)-1):
        diff.append(center_list[i+1] - center_list[i])
        diff_total += center_list[i+1] - center_list[i]

    diff.sort(reverse=True)

    for i in range(center-1):
        diff_total -=diff[i]

    print(diff_total)

問題を解く

  • は、最初に各整数からセンサの値の和を求めようとした.
  • が同じ方向であることを確認した場合、大きい方の長さは小さい方の長さを無視する.
  • 2 2回目はmaxとminを求め、それらを中間値に切ろうとした.
  • 例が正しい
    9
    3
    1 2 4 5 6 7 8 9 10
    この例では、エラーが検証されています.
  • 第3回目の発見では,ノードごとに1つの差分値を求め,中心個数−1の差分値から減算すればよい.
  • の重要な事実list->set->listをすれば自動的にソートできると思っていましたが、そうではありません.
  • をソートする必要があります
  • centerはセンサよりも多い場合がありますので、
  • を出力0に設定します.