您的位置:首页 > 其它

hdu 4811 Ball

2014-07-10 16:14 316 查看
分类讨论,看分成两堆两边的个数。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

__int64 a[3][3][3];
__int64 f[4],n,k,tep;

int main()
{
a[0][0][0]=0,a[0][0][1]=0,a[0][0][2]=1,a[0][1][1]=1,a[0][1][2]=3,a[0][2][2]=6;
a[1][1][1]=3,a[1][1][2]=6,a[1][2][2]=10,a[2][2][2]=15;
while(scanf("%I64d%I64d%I64d",&f[1],&f[2],&f[3])!=EOF)
{
n=k=0;
for(int i=1;i<4;i++)
{
if(f[i]>2) k=2;
else k=f[i];
n+=f[i]-k;
f[i]=k;
}
sort(f+1,f+4);
tep=f[1]+f[2]+f[3];
printf("%I64d\n",a[f[1]][f[2]][f[3]]+n*tep);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: