现在代码还在调试,但是给的测试案例1
输入2 1
2 2
2 1000
输出2.0
程序check(2)=2,但是为什么一直进不去那个if(语句),只能到1.9就结束了
下面是代码
#include<iostream>
using namespace std;
int n,p;
int a[10000][2];
int r=1000000,l=0,mid=10000;
double r2,l2,mid2;
double sum=0,ans=0;
double num=0;
int flag=0;
double check(double x){
sum=0,ans=0;
for(int i=0;i<n;i++){
if(a[i][0]*x>a[i][1])sum+=a[i][0];
}
if(sum<=p){
return -1;
}
sum=p*x;
for(int i=0;i<n;i++){
if(a[i][0]*x>a[i][1])ans+=a[i][0]*x-a[i][1];
}
if(sum>=ans)return sum;
return 0;
}
int main(){
cin>>n>>p;
for(int i=0;i<n;i++){
cin>>a[i][0]>>a[i][1];
}
while(l<r){
if((r-l<=2&&flag==0)||mid-l<=1||r-mid<=1){
cout<<1111<<endl;
flag=1;
r2=r;
l2=l;
mid2=mid;
cout<<mid<<endl;
cout<<mid2<<endl;
for(double i=l2;i<=r2+2;i+=0.1){
cout<<i<<"******"<<endl;
cout<<check(2)<<endl;
if(check(i)!=0){
num=i;
cout<<num<<"&&&&&"<<endl;
}
else {
cout<<num;
return 0;
}
}
}else{
cout<<22222<<endl;
mid=(l+r)/2;
if(check(mid)==-1){
cout<<-1;
return 0;
}
if(check(mid)){
num=mid;
//if(flag==1)l=mid+0.001;
l=mid;
mid=(l+r)/2;
cout<<l<<"*****"<<r<<endl;
}else{
//if(flag==1)r=mid-0.001;
r=mid;
mid=(l+r)/2;
//cout<<44444<<endl;
}
}
}
cout<<num;
}