1 solutions
-
0
C++ :
#include<iostream> #include<cstdio> #include<algorithm> #include <cmath> #define N 10005 using namespace std; int w[N],v[N]; double tmp[N]; int n,k; double tryit(double m) { for(int i=0;i<n;i++) tmp[i] = v[i] - w[i]*m; sort(tmp,tmp+n); double sum = 0; for(int i=n-1;i>=n-k;i--) sum += tmp[i]; return sum; } int main() { while(~scanf("%d %d",&n,&k)){ double t,l = 0,r = 0; for(int i=0; i<n; i++){ scanf("%d %d",&w[i],&v[i]); t = v[i]*1.0/w[i]; r = t > r ? t : r; } while(fabs(r-l)>1e-4){ double m = (r+l)/2; if(tryit(m)>=0) l = m; else r = m; } printf("%.2lf\n",l); } return 0; }
- 1
Information
- ID
- 16382
- Time
- 3000ms
- Memory
- 64MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By