@lychee123
2017-01-23T16:01:41.000000Z
字数 914
阅读 1301
水题
题意
输入三个数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要注意
