1 solutions

  • 0
    @ 2025-11-5 15:05:21

    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