堆糖

新生训练赛002

给你一囗甜甜゛ 提交于 2020-01-03 15:10:48
D. Eat Candies (思维题) 题意:每天吃两颗糖且种类不同,最多可以吃几天 题解:先把三堆糖果进行从小到大排序,然后为了让吃的天数最多,先对最小数目的糖果进行匹配,但是需要注意的是当第二堆与第三堆糖果数目相同的时候就把第一堆平均分配。因此在这里需要判断第二堆的差d与第一堆数目的大小关系:当d>a[0]的时候,则先把a[0]与a[3]匹配即把a[0]吃完;当a[0]>d时,先把a[0]与a[3]匹配d个糖果,此时变成a[0]-d,a[1],a[2]-d则这个时候a[1]=a[2]-d,代码如下: # include <iostream> # include <algorithm> using namespace std ; int n ; int a [ 3 ] ; int main ( ) { cin >> n ; int sum ; while ( n -- ) { sum = 0 ; cin >> a [ 0 ] >> a [ 1 ] >> a [ 2 ] ; sort ( a , a + 3 ) ; int d = a [ 2 ] - a [ 1 ] ; if ( a [ 0 ] >= d ) sum = d + a [ 1 ] + ( a [ 0 ] - d ) / 2 ; else sum = a [ 1 ] + a [ 0 ] ; cout << sum <