しゃくとり法を用いる問題

実現したいこと

競プロの問題です。
問題文
KYOPRO 商店にはN個の品物が売られており、i番目の品物はAi円です。連続する番号の品物を買う方法は全部でN(N+1)/2 通りありますが、この中で合計価格がK円以内となるような買い方は何通りでしょうか。

前提

サンプル例です。

入力として
7 50
11 12 16 22 27 28 31

出力として
13

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

n, k = map(int, input().split()) a = list(map(int, input().split())) a.sort() for i in range(n): if i == 0: a[i] = a[i] else: a[i] += a[i-1] a.insert(0, 0) r = [None] * (n+1) for i in range(n+1): if i == 0: r[i] = 1 else: r[i] = r[i-1] while(r[i] < n+1 and (a[r[i]] - a[i]) <= k): r[i] += 1 ans = 0 for i in range(n+1): ans += (r[i] - i - 1) print(ans)

試したこと

解説も見たのですがエラーの原因がわかりません。
解説ではr[i] = -1として自分とは2個分rの数がずれていましたが、違いが分からないです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント