90分卡精度自闭蒟蒻求助
查看原帖
90分卡精度自闭蒟蒻求助
112927
主编稻草一号楼主2021/8/23 09:12

TLE掉了两个点,但是如果精度减小就会WA,精度增大更加TLE,似乎已经不是精度的问题了QAQ

细想总是觉得不对劲,但又不知道问题在哪里……

大佬们来拯救一下我这个自学蒟蒻吧QAQ

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e6+5;
const double eps=0.00004;
int n,p,a[MAX],b[MAX],ro=0;
double ri=100000.000000,ans2=0.000000,ans=0.000000;
long long ans3=0;
inline int read(){
	char ch=getchar();
	int i=0;
	while(ch>'9'||ch<'0'){
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		i=(i<<1)+(i<<3)+(ch^48);
		ch=getchar();
	}
	return i; 
}
 inline void check(double l,double r){
	double mid=(l+r)/2;
	ans=0;
	for(register int i=1;i<=n;i++){
		if(a[i]*mid<=b[i])
		    continue;
		else{
			ans+=(a[i]*mid-b[i])/p;
		}
	}
	if(ans-mid>eps){
		ro=0;
		check(l,mid);
	}
	if(ans-mid<=eps){
		if(ans-mid>-eps&&ans-mid<eps&&ans>ans2){
			ans2=ans;
			ro++;
		}
		if(ro>=1){
			printf("%.6lf",ans2);
			exit(0);
		}
		check(mid,r);
	}
};
int main(){
	n=read();
	p=read();
	for(register int i=1;i<=n;i++){
		a[i]=read();
		b[i]=read();
		ans3+=a[i];
	}
	if(ans3<p){
		printf("-1");
		return 0;
	}
	ans=0.000000;
	check(0.000000,ri);
	return 0;
}
2021/8/23 09:12
加载中...