题目地址: http://www.codeforces.com/problemset/problem/216/A
方法一:
YY的写法,转化成水平相互对齐的图形去做即可。。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
const int inf = 0x7fffffff;
int main(){
int a[3],kk,k,sum;
while(~scanf("%d%d%d",&a[0],&a[1],&a[2])){
sort(a,a+3);
k=a[1]-1+a[0];
sum=2*((k*(k+1)/2)-(a[0]*(a[0]-1)/2));
if(a[1]==a[2]) sum-=k;
else sum+=(a[2]-a[1]-1)*k;
printf("%d\n",sum);
}
return 0;
}
/*
2 3 3
14
2 2 4
13
2 2 2
7
*/
方法二:
将所有小六边形 立体化 转化成 小正方体~~
很容易就发现,这图形很像一个长方体·~
于是,题目的问题就转化成:
由一些小正方体组成一个a*b*c 的大长方体,问你从图中这个角度去看,能看到多少个小正方体?
那么显然。。。 res = a*b*c - (a-1)*(b-1)*(c-1)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
const int inf = 0x7fffffff;
int main(){
long long a,b,c;
cin>>a>>b>>c;
cout<<a*b*c-(a-1)*(b-1)*(c-1)<<endl;
return 0;
}
/*
2 3 3
14
2 2 4
13
2 2 2
7
*/