社区讨论
一直只AC了七个点,求助
P3743小鸟的设备参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo8s5ieo
- 此快照首次捕获于
- 2023/10/27 23:40 2 年前
- 此快照最后确认于
- 2023/10/27 23:40 2 年前
CPP
#include<iostream>
#include<cmath>
using namespace std;
using namespace std;
int check(double mid,long n,long p,long a[],long b[]){
double need=0;
for(long i=0;i<n;i++){
if(a[i]*mid>b[i]){
need+=a[i]*mid-b[i];
}
}
//cout<<"need="<<need<<" p*mid="<<p*mid<<endl;
if(fabs(need-p*mid)<10e-3){
return 0;
}
else if(need>p*mid){
//时间太长了,应该right=mid
return -1;
}
else{
return 1;
}
}
int main(){
long n;
long p;
cin>>n>>p;
long a[n],b[n];
for(long i=0;i<n;i++){
cin>>a[i]>>b[i];
}
double left=0,right=pow(2,sizeof(long long)*8);
//cout<<"right="<<right<<endl;
while(right-left>10e-4){
double mid=(left+right)/2;
//cout<<"mid="<<mid<<endl;
int tip=check(mid,n,p,a,b);
if(tip==0){
cout<<mid<<endl;
break;
}
else if(tip<0){
//能用时间比mid长
right=mid;
}
else{
left=mid;
}
}
if(left>right||right==pow(2,sizeof(long long)*8)){
cout<<-1<<endl;
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...