分类讨论,看分成两堆两边的个数。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 7 __int64 a[3][3][3]; 8 __int64 f[4],n,k,tep; 9 10 int main() 11 { 12 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; 13 a[1][1][1]=3,a[1][1][2]=6,a[1][2][2]=10,a[2][2][2]=15; 14 while(scanf("%I64d%I64d%I64d",&f[1],&f[2],&f[3])!=EOF) 15 { 16 n=k=0; 17 for(int i=1;i<4;i++) 18 { 19 if(f[i]>2) k=2; 20 else k=f[i]; 21 n+=f[i]-k; 22 f[i]=k; 23 } 24 sort(f+1,f+4); 25 tep=f[1]+f[2]+f[3]; 26 printf("%I64d ",a[f[1]][f[2]][f[3]]+n*tep); 27 } 28 return 0; 29 }