P3743 小鸟的设备,求助
查看原帖
P3743 小鸟的设备,求助
732930
Xixiliaiyiyongzai楼主2024/8/20 08:41

现在代码还在调试,但是给的测试案例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;
}
2024/8/20 08:41
加载中...