[CodeForces]1263A Sweet Problem
题目描述
You have three piles of candies: red, green and blue candies:
the first pile contains only red candies and there are rrr candies in it,
the second pile contains only green candies and there are ggg candies in it,
the third pile contains only blue candies and there are bbb candies in it.
Each day Tanya eats exactly two candies of different colors. She is free to choose the colors of eaten candies: the only restriction that she can’t eat two candies of the same color in a day.
Find the maximal number of days Tanya can eat candies? Each day she needs to eat exactly two candies.
输入
The first line contains integer t(1≤t≤1000)t (1≤t≤1000)t(1≤t≤1000) — the number of test cases in the input.
Then ttt test cases follow.
Each test case is given as a separate line of the input. It contains three integers rrr, ggg and b(1≤r,g,b≤108)b(1≤r,g,b≤10^8)b(1≤r,g,b≤108) — the number of red, green and blue candies, respectively.
输出
Print ttt integers: the iii-th printed integer is the answer on the iii-th test case in the input.
题目大意
给定ttt组测试数据。
每组数据包含r,g,br,g,br,g,b三个数,代表3种糖的数量。
每天只能吃不同的两种糖,两种各吃一颗。
求最多能吃多少天。
解法
容易发现哪种颜色都没有关系,因此直接假定:
r>g>br>g>br>g>b
那么怎么吃最优呢?最优吃法应当是固定的。我考虑计算r与gr与gr与g的差值。
设delta=r−gdelta = r - gdelta=r−g,
那么若delta>=bdelta >= bdelta>=b,即把b和r一起吃完b后,只剩下r−b,gr-b,gr−b,g,此时r−b>=gr-b>=gr−b>=g,那么再一起吃ggg天即可。
此时ans=b+gans = b + gans=b+g。
若delta<bdelta < bdelta<b,那么我们把rrr和bbb一起吃,吃deltadeltadelta天,使得rrr吃完后与ggg相等。
随后均分剩余的bbb给另外两堆,每堆吃(b−delta)/2(b-delta)/2(b−delta)/2天。这里向下取整,如果多了一颗糖不能凑成一对,对结果没有影响。
随后吃g−(b−delta)/2g-(b-delta)/2g−(b−delta)/2天即可把剩下两堆一起吃完。
若(b−delta)/2(b-delta)/2(b−delta)/2为奇数,那么最后会剩下一颗糖,否则全部吃完。
统计答案,ans=delta+(b−delta)+g−(b−delta)/2ans = delta + (b-delta) + g-(b-delta)/2ans=delta+(b−delta)+g−(b−delta)/2
即ans=r−g+b−r+g+g−b/2+r/2−g/2ans = r - g + b - r + g + g - b/2 + r/2 - g/2ans=r−g+b−r+g+g−b/2+r/2−g/2
整理得ans=(r+g+b)/2ans = (r+g+b)/2ans=(r+g+b)/2
除以二向下取整,那么奇偶的影响就被消除了。可以手推几组感受一下。
Code
#include <cstdio>
#include <algorithm>
using namespace std;
int all[4];
int ans, t;
int main()
{
scanf("%d", &t);
while (t--)
{
ans = 0;
for (int i = 1; i <= 3; ++i)
scanf("%d", all + i);
sort(all + 1, all + 4);
int delta = all[3] - all[2];
if (delta >= all[1])
printf("%d\n", all[1] + all[2]);
else
printf("%d\n",(all[1] + all[2] + all[3])>>1);
}
return 0;
}
[CodeForces]1263A Sweet Problem的更多相关文章
- Codeforces Round #603 (Div. 2) A. Sweet Problem(水.......没做出来)+C题
Codeforces Round #603 (Div. 2) A. Sweet Problem A. Sweet Problem time limit per test 1 second memory ...
- Codeforces Round #603 (Div. 2) A. Sweet Problem 水题
A. Sweet Problem the first pile contains only red candies and there are r candies in it, the second ...
- codeforces 340C Tourist Problem
link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...
- codeforces B. Routine Problem 解题报告
题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...
- Codeforces 527D Clique Problem
http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...
- Codeforces 706C - Hard problem - [DP]
题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...
- Codeforces 1096D - Easy Problem - [DP]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
- Codeforces 793C - Mice problem(几何)
题目链接:http://codeforces.com/problemset/problem/793/C 题目大意:给你一个捕鼠器坐标,和各个老鼠的的坐标以及相应坐标的移动速度,问你是否存在一个时间点可 ...
- CodeForces 687A NP-Hard Problem
Portal:http://codeforces.com/problemset/problem/687/A 二分图染色 好模板题 有SPJ 值得注意的是,因为C++的奇妙的运算机制 若在vector变 ...
随机推荐
- sublime3常用环境配置
如何设置侧边栏颜色 Ctrl+Shift+P -> install -> 搜索安装包SyncedSidebarBg,自动同步侧边栏底色为编辑窗口底色. 设置快捷键让html文件在浏览器窗口 ...
- 解决Hibernate配置文件不在SRC文件夹下获取Session方法
- [转]JSP自定义标签
原文链接 当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 自定义标签 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写 ...
- 1.HTTP与HTTPS区别
1.HTTP与HTTPS区别 HTTP协议默认采用80端口 HTTPS协议默认采用443 HTTPS相较于HTTP协议更安全一些,采用SSL+安全证书,但是效率低 2.使用代码格式模拟HTTP请求(H ...
- C#操作Word的超详细总结 ---转载
C#操作Word的超详细总结 本文中用C#来操作Word,包括: 创建Word: 插入文字,选择文字,编辑文字的字号.粗细.颜色.下划线等: 设置段落的首行缩进.行距: 设置页面页边距和纸张大小: 设 ...
- 远程登陆ubantu服务器 .bashrc文件每次打开终端都需要source的问题
通过创建的用户登录ubantu服务器时,.bashrc文件每次都要重新配置,要不然里面的配置如命令的简写如 ll 等就无法识别,本方法用于实现登录时自动执行.bashrc文件. 1.ubantu启动时 ...
- 如何用python写个人专属群聊提醒小助手?
前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...
- Flask - 请求扩展,钩子函数(Django的中间件) --> 请求前,中,后,
例子1. 处理请求之前 @app.before_request 在请求之前,这个被装饰的函数会被执行 用户登录验证代码可以在这里写 @app.before_request def process_re ...
- 五、centos7安装mysql:安装mysqlser
一.下载通用安装二进制包 先下载mysql安装包:打开 http://dev.mysql.com/downloads/mysql/ 选择 linux - Generic并在其下选择 Linux - G ...
- excel2003 颜色筛选问题
"excel2003中,添加辅助列,用定义名称的方法得到对应的颜色号,然后对辅助列进行排序: 颜色单元格在A列,选中B1,插入->名称->定义,输入a,下面输入公式 =get.c ...