wa
查看原帖
wa
376481
Carrot_Rui楼主2020/12/30 16:32

错了两个点,测试点自己编了几个小的数据过了,but WA了两个,

noi之鄙人,未尝干完此题,求大佬教~

(先祝大家快乐)

#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;

int a[MAXN],b[MAXN],n,k;

int check(double  x){//寻找合适的值 
	double ans = 0;
	for(int i=0 ; i<=n ; i++)
		if(a[i]*x>b[i])
			ans+=(a[i]*x-b[i]);
	return ans<=(x*k);
}
int main(void){
	scanf("%d%d",&n,&k);
	int sum = 0;
	for(int i=1 ; i<=n ; i++){scanf("%d%d",&a[i],&b[i]);sum += a[i];}
	
	if(sum <= k) {cout<<-1<<endl;return 0;}//总消耗小于充电总量 贪心 
	double  l = 0 , r= 1e10 ;
	while(r - l > 1e-6){//二分找答案 
		double mid = (l + r)/2.0;
		if(check(mid)) l = mid;//不够 
		else   r = mid ;//够则 时间能不能更小?即左区间 
	}
	printf("%.10lf",l);
	return 0;
}
2020/12/30 16:32
加载中...