题解 | #装备合成#

装备合成

https://ac.nowcoder.com/acm/problem/200211

思路:

三分,三分要满足函数是先增后减或者先减后增的,这里可以三分用第一个方案的次数,假设第一个方案用了n次,那么第二个方案的个数就是min( (x-2n)/4 , y-3n ),对于单调性的证明,参考下面的博客。

https://blog.csdn.net/RunningBeef/article/details/113836764?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long

int x,y;

int check(int f){
	return f+min((x-f*2)/4,(y-3*f));//总件数
}

int main() {
	int t;
	cin>>t;
	while(t--) 
	{
        scanf("%d%d",&x,&y);
        int l=0,r=min(x/2,y/3);//r最大就是都用第一种方案
        while(l<r)
        {
        	int mid1=l+(r-l)/3;
        	int mid2=r-(r-l)/3;
        	
			if(check(mid1)>check(mid2))
			{
				r=mid2-1;
			}
			else l=mid1+1;
		}
		
		cout<<check(l)<<endl;
		
	}

	return 0;
}
全部评论

相关推荐

07-09 12:12
门头沟学院 Java
5月底投简历7月初开奖收获秋招第一个offer,虽然白菜价,但至少能保底了
土木转行ing:土木博士想转图像,最后拿了 tp 提前批 sp 最低档,感觉性价比不高
TP-LINK开奖132人在聊
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务