[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变 ...
随机推荐
- 珠心算测验(0)<P2014_1>
珠心算测验 (count.cpp/c/pas) 问题描述] 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得 ...
- Mysql 分组查询出现'this is incompatible with sql_mode=only_full_group_by'的解决办法
由于Mysql自动开启了 only_full_group_by,所以若查询的字段不在group by里面,则分组报错. 解决办法其一:mysql配置,关闭only_full_group_by,这种办法 ...
- 函数返回值retrun
如果函数不写retrun,默认返回None. return多个对象,那么Python帮我们把这多个对象封装成一个元组返回. return 作用 结束函数.返回某个对象
- 「学习笔记」FFT 之优化——NTT
目录 「学习笔记」FFT 之优化--NTT 前言 引入 快速数论变换--NTT 一些引申问题及解决方法 三模数 NTT 拆系数 FFT (MTT) 「学习笔记」FFT 之优化--NTT 前言 \(NT ...
- GSS系列题解——最大子段和系列
开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...
- 笔记-pymysq-exception
笔记-pymysq-exception 1. exception DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 基本上是继承了Exception基类,没有添加额外功能. ...
- PAT T1011 Cut Rectangles
大模拟题,按要求建立多边形,先定位斜边的位置,再分类讨论~ #include<bits/stdc++.h> using namespace std; ; struct node { dou ...
- EC20指令
SIM卡热插拔检测: AT+QSIMSTAT=1 //开启SIM卡热拔插状态报告AT+QSIMDET=1,1或AT+QSIMDET=1,0//开启 SIM卡检测功能当SIM卡拔出或者 ...
- SRS命令
下载源码: git clone https://github.com/ossrs/srs.git 编译: cd srs/trunk ./configure && make 开启服务: ...
- Linux 下安装 FFmpeg
1. 下载源代码: git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2. 编译 ./configure --enable-shared --pre ...