http://www.51nod.com/Challenge/Problem.html#problemId=1257
#include#define fi first#define se second#define INF 0x3f3f3f3f#define LNF 0x3f3f3f3f3f3f3f3f#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)#define pqueue priority_queue#define NEW(a,b) memset(a,b,sizeof(a))const double pi=4.0*atan(1.0);const double e=exp(1.0);const double eps=1e-10;const int maxn=4e5+8;typedef long long LL;typedef unsigned long long ULL;const LL mod=1e9+7;const ULL base=1e7+7;const int maxp=26+5;using namespace std;int w[maxn],p[maxn];pair d[maxn];int main(){ int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d%d",&w[i],&p[i]); } double l=0.0,r=50001.0; double mid; double sz; LL fz,fm; while(l+eps<=r){ mid=(l+r)/2.0; sz=0.0; for(int i=1;i<=n;i++){ d[i].fi=(double)p[i]-mid*w[i]; d[i].se=i; } sort(d+1,d+1+n); for(int i=n;i>=n-k+1;i--){ sz+=d[i].fi; } if(sz>=eps){ fm=0; fz=0; for(int i=n;i>=n-k+1;i--){ fm+=p[d[i].se]; fz+=w[d[i].se]; } l=mid; } else{ r=mid; } } LL g=__gcd(fm,fz); fm/=g; fz/=g; cout< <<'/'< <