二分求助,悬赏rand()%114514+1个赞
查看原帖
二分求助,悬赏rand()%114514+1个赞
664744
_lqs_楼主2023/3/11 08:00
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,i,j,ans;
int a[105],b[105],c[105],t,ntc,ntm;
int tm1,tc,l1,r1,l2,r2;
bool cha(int p1,int p2){
	for(int i=1;i<=n;i++){
		if(p1*a[i]+p2*b[i]>c[i]) return false;
	}
	return true;
}
signed main(){
//	freopen("2.in","r",stdin);
//	freopen("1.out","w",stdout);
	scanf("%lld",&t);
	while(t--){
		scanf("%lld%lld%lld",&n,&tc,&tm1),ans=0;
		for(i=1;i<=n;i++) scanf("%lld%lld%lld",&a[i],&b[i],&c[i]); 
		l1=1,r1=tc;
		ntc=tc,ntm=tm1;
		while(l1<=r1){
			m=(l1+r1)>>1;
			int flag=0;
			l2=1,r2=tm1;
			while(l2<=r2){
				int mid=(l2+r2)>>1;
				if(cha(m,mid)){
					flag=1;
					if(m+mid>ans){
						ans=m+mid;
						ntc=m,ntm=mid;
					}
					l2=mid+1;
				}
				else r2=mid-1;
			}
			if(flag) l1=m+1;
			else r1=m-1;
		} 
		printf("%lld\n",tc+tm1-ntc-ntm);
	}
	return 0;
}

简单思路就是二分套二分。

求帮忙看看二分哪里写挂了或者是如何调。

2023/3/11 08:00
加载中...