http://poj.org/problem?id=3111
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
double w,v;
int id;
double key;
}in[100010];
bool cmp(const node &A, const node &B){
return A.key > B.key;
}
int main(){
// freopen("in.txt", "r", stdin);
int n,k;
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++){
scanf("%lf%lf",&in[i].v, &in[i].w);
in[i].id = i;
}
double left = 0, right = 1000000000, mid;//分数规划的变形
while(right - left > 1e-6){//精度限制
mid = (left + right) / 2;
for(int i=1; i<=n; i++)
in[i].key = in[i].v - mid * in[i].w;
sort(in+1, in+1+n, cmp);
double sum = 0;
for(int i=1; i<=k; i++)
sum += in[i].key;
if(sum > 0) left = mid;
else right = mid;
}
for(int i=1; i<k; i++)
printf("%d ",in[i].id);
printf("%d\n",in[k].id);
return 0;
}