gt22

Untitled

Oct 3rd, 2019
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <vector>
  2. #include "optimization.h"
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <functional>
  6. using namespace std;
  7. typedef pair<int, int> pii;
  8.  
  9. vector<pii> a;
  10. vector<pair<double, int>> ans;
  11. vector<double> scaledVector;
  12.  
  13. int main() {
  14.     int n = readInt(), k = readInt();
  15.     a.resize(n);
  16.     scaledVector.resize(n);
  17.     for (int i = 0; i < n; ++i) {
  18.         a[i] = make_pair(readInt(), readInt());
  19.     }
  20.     double l = 0, r = 1e6;
  21.  
  22.     for (int kk = 0; kk < 50; ++kk) {
  23.         double m = (l + r) / 2;
  24.         for (int i = 0; i < n; ++i) {
  25.             pii x = a[i];
  26.             scaledVector[i] = x.first - m * x.second;
  27.         }
  28.         nth_element(scaledVector.begin(), scaledVector.begin() + k, scaledVector.end());
  29.         double sum = 0;
  30.         for (int i = k; i < n; ++i) {
  31.             sum += scaledVector[i];
  32.         }
  33.         if(sum >= 0) {
  34.             l = m;
  35.         } else {
  36.             r = m;
  37.         }
  38.     }
  39.     ans.resize(n);
  40.     for (int i = 0; i < n; ++i) {
  41.         pii x = a[i];
  42.         ans[i] = make_pair(x.first - l * x.second, i);
  43.     }
  44.     sort(ans.rbegin(), ans.rend());
  45.     for (int i = 0; i < k; ++i) {
  46.          writeInt(ans[i].second + 1, ' ');
  47.     }
  48.     writeChar('\n');
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment