@lychee123
2017-01-24T00:01:41.000000Z
字数 914
阅读 1070
水题
题意
输入三个数a,b,c,有四种组合3a,3b,3c,abc,问最多可以有多少组
样例
input
3 6 9
output
6
input
4 4 4
output
4
input
0 0 0
output
0
分析
当有0存在时单独讨论,当最小数是1时(两种情况讨论),其他情况分三种情况讨论,通过看最小的那个数的用量来判断什么办法最优
代码
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
long long a[5],sum1,sum2,sum3,ans;
while(~scanf("%lld%lld%lld",&a[0],&a[1],&a[2]))
{
sum1=0,sum2=0,sum3=0;
sort(a,a+3);
if(a[0]==0)
ans=a[1]/3+a[2]/3;
else if(a[0]==1)
{
sum1=a[0]/3+a[1]/3+a[2]/3;///a[0]剩余一个不用
sum2=1+(a[1]-1)/3+(a[2]-1)/3;///a[0]用完
ans=max(sum1,sum2);
}
else
{
sum1=a[0]+(a[1]-a[0])/3+(a[2]-a[0])/3;///a[0]用完
sum2=a[0]-1+(a[1]-a[0]+1)/3+(a[2]-a[0]+1)/3;///a[0]剩余一个不用
sum3=a[0]-2+(a[1]-a[0]+2)/3+(a[2]-a[0]+2)/3;///a[0]剩余两个不用
ans=max(max(sum1,sum2),sum3);
}
printf("%lld\n",ans);
}
return 0;
}
这个代码思路比较清晰,之前的代码更短但是思路略显混乱 ,下来看的时候有点蒙,虽然也过了。之前WA了特别多次,还觉得自己的代码没错,改不出来,下来想的时候才发现思路都错了,通过余数来分类讨论是不对的,哪怕你最小的数除以3余数为零,也可以选择留一个不用,比如 3 8 8 这种类型的数据 还有两个例子 就是0 2 2 和1 2 2要注意