予算内で 選ぶ 2 つの商品
- 並べ替えと貪欲
- 問題 10
- ふつう
- 目安 31 分
商品の
本番の
入力は
問題
取引先への
同じ
入力の形式
N B
p_1 p_2 ... p_N1 行目に
出力の形式
答えの
制約
- N は 2 以上 200000 以下です
- 予算 B は 1 以上 2000000000 以下の整数です
- 値段 p_i は 1 以上 1000000000 以下の整数です
入力と出力の例
例 1
予算は
入力
5 1000 300 800 450 120 500
出力
950
例 2
どの
入力
3 500 400 300 250
出力
-1
例 3
同じ
入力
4 600 300 700 300 100
出力
600
ヒント
まだ開いていません
付箋は 3 枚。下の段ほど答えに近づきます
ヒント 2
ヒント 3答えに近い
全部の
先に
解答
値段を
Python
Python
import sys
data = sys.stdin.read().split()
n, budget = int(data[0]), int(data[1])
prices = sorted(map(int, data[2:2 + n]))
best = -1
i, j = 0, n - 1
while i < j:
total = prices[i] + prices[j]
if total <= budget:
if total > best:
best = total
i += 1
else:
j -= 1
print(best)JavaScript
JavaScript
const data = require("fs").readFileSync(0, "utf8").split(/\s+/).filter(Boolean).map(Number);
const n = data[0];
const budget = data[1];
const prices = data.slice(2, 2 + n).sort((a, b) => a - b);
let best = -1;
let i = 0;
let j = n - 1;
while (i < j) {
const total = prices[i] + prices[j];
if (total <= budget) {
if (total > best) best = total;
i++;
} else {
j--;
}
}
console.log(best);計算量
時間は O(N log N) で、
よく ある間違い
- JavaScript の
sort()を引数なしで 呼ぶ。 数ではなく 文字として 並ぶので、 1000 が 300 より 前に 来ます。 sort((a, b) => a - b)と書きます - 同じ
商品を 2 回選んでしまう。 i と j が 同じ 位置に なったら 止めます ( i <= jではなくi < j) - 選べない
ときの -1 を 出し忘れて、 答えの 初めの 値の 0 を そのまま出す - 予算ちょうどの
組を 外してしまう。 「予算以下」なので <=で比べます
解答を動かした版 Python 3.12.14Node.js 22.23.4確認日 2026/10/31