Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include "optimization.h"
- #include <cmath>
- #include <algorithm>
- #include <functional>
- using namespace std;
- typedef pair<int, int> pii;
- vector<pii> a;
- vector<pair<double, int>> ans;
- vector<double> scaledVector;
- int main() {
- int n = readInt(), k = readInt();
- a.resize(n);
- scaledVector.resize(n);
- for (int i = 0; i < n; ++i) {
- a[i] = make_pair(readInt(), readInt());
- }
- double l = 0, r = 1e6;
- for (int kk = 0; kk < 50; ++kk) {
- double m = (l + r) / 2;
- for (int i = 0; i < n; ++i) {
- pii x = a[i];
- scaledVector[i] = x.first - m * x.second;
- }
- nth_element(scaledVector.begin(), scaledVector.begin() + k, scaledVector.end());
- double sum = 0;
- for (int i = k; i < n; ++i) {
- sum += scaledVector[i];
- }
- if(sum >= 0) {
- l = m;
- } else {
- r = m;
- }
- }
- ans.resize(n);
- for (int i = 0; i < n; ++i) {
- pii x = a[i];
- ans[i] = make_pair(x.first - l * x.second, i);
- }
- sort(ans.rbegin(), ans.rend());
- for (int i = 0; i < k; ++i) {
- writeInt(ans[i].second + 1, ' ');
- }
- writeChar('\n');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment