解析:
做法一:二分,显然左右边界为 0 和 总数量除以3。check时mid,任意两项之和都不能小于mid
做法二:贪心,当数量最大的气球数量的一半小于另外两种颜色气球的数量之和,可以组成全部颜色数量之和的三分之一。否则全部组成都是 2:1 的方案。
二分代码:
- #include
- using namespace std;
- #define int long long
- int a,b,c;
- bool check(int mid){
- if(a+b
return false; - return true;
- }
- signed main(){
- scanf("%lld%lld%lld",&a,&b,&c);
- int l=0,r=(a+b+c)/3;
- while(l
- int mid=l+r+1>>1;
- if(check(mid)) l=mid;
- else r=mid-1;
- }
- cout<
- return 0;
- }
贪心代码:
- #include
- using namespace std;
- #define int long long
- int r,g,b;
- signed main(){
- scanf("%lld%lld%lld",&r,&g,&b);
- cout<<min(r+g,min(g+b,min(r+b,(r+g+b)/3)));
- return 0;
- }
-
相关阅读:
AcrelEMS高速公路微电网能效管理平台与智能照明解决方案智慧点亮隧道
Jemeter的简单使用教程(压测)
自动化测试的生命周期是什么?
Spring Boot常规知识整理
C语言接口与实现:创建可重用软件的技术
STM32单片机——串口通信(轮询+中断)
【C转C++之路】浅析命名空间
神级开源库收藏
优炫数据库获“2022能源企业信息化产品技术创新”案例
【图像处理】【应用程序设计】加载,编辑和保存图像数据、图像分割、色度键控研究(Matlab代码实现)
-
原文地址:https://blog.csdn.net/JungleZRD/article/details/133784410