Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- using namespace std;
- using ll = long long;
- using ull = unsigned long long;
- ull mid = 0;
- struct jewel{
- ull id;
- ull v;
- ull w;
- };
- bool comp(jewel a1, jewel a2){
- return ((a1.v - mid * a1.w) < (a2.v - mid * a2.w));
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- ull n, k;
- cin >> n >> k;
- vector<jewel> vec(n);
- cin >> vec[0].v >> vec[0].w;
- vec[0].id = 0;
- ull max = vec[0].v;
- ull min = vec[0].w;
- for(ull i = 1; i < n; ++i){
- cin >> vec[i].v >> vec[i].w;
- vec[i].id = i;
- if (vec[i].v > max) max = vec[i].v;
- if (vec[i].w < min) min = vec[i].w;
- }
- //диапазоны бин поиска, идем по ответу
- ull l = 0; //включая
- ull r = max / min + 1; //не включая
- ull sum = 0;
- while(r - l > 1){
- mid = (l + r) / 2;
- sort(vec.begin(), vec.end(), comp);
- for(ull i = n - k; i < n; ++i){
- sum += vec[i].v - mid * vec[i].w;
- }
- if (sum < 0) l = mid + 1;
- else r = mid;
- sum = 0;
- }
- sort(vec.begin(), vec.end(), comp);
- for(ull i = n - k; i < n; ++i){
- cout << vec[i].id << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement