gt22 icon

Untitled

gt22 | PRO | 10/03/19 06:51:57 PM UTC | 0 ⭐ | 566 👁️ | Never ⏰ | []
C++ |

1.24 KB

|

None

|

0 👍

/

0 👎

#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;
}

Comments