Official
C - ロープの切り分け / Cutting a Rope Editorial
by
C - ロープの切り分け / Cutting a Rope Editorial
by
kyopro_friends
必要なロープの長さが短い生徒から順に貪欲に配るのが最適です。
よって、残りのロープの長さを管理しながらロープの配布をシミュレーションすることでこの問題を解くことができます。切る回数の条件は「切る回数が高々 \(K\) 」ではなく、「ロープを配ることができる生徒数は高々 \(K+1\) 」と考えることで、最後に min をとることで対処できます。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, l, k;
cin >> n >> l >> k;
vector<int>a(n);
for(int i=0; i<n; i++) cin >> a[i];
sort(a.begin(), a.end());
int pos = 0;
while(pos < n && a[pos] <= l){
l -= a[pos];
pos++;
}
cout << min(pos, k+1) << endl;
}
実装例 (Python)
N, L, K = map(int, input().split())
A = list(map(int, input().split()))
A.sort()
pos = 0
while pos < N and A[pos] <= L:
L -= A[pos]
pos += 1
print(min(pos, K+1))
posted:
last update:
