codeforces 560 C. Gerald's Hexagon (思维,几何)

题意:给定一个六边形的六条边的长,问能分割成多少个单位正三角形.

分割不好办,那我们就反着来,先补成一个包含这个六边形的正三角形.

对于边长为a的正三角形,显然我们可以分割成a*a个单位正三角形

大正三角形的边长为连续的三条边的和

而要减掉的三个小三角形的边长为与之前连续的三条边的起始边的序号的奇偶性相同的三条边.

就是说如果求和的时候求的是前三条边,那么三个要减掉的小三角形的边长就是第一,三,五条边.

如果求和的时候求的是后三条边,那么三个要减掉的小三角形的边长就是第二,第四,第六条边.

/*************************************************************************
	> File Name: code/#313/C.cpp
	> Author: 111qqz
	> Email: rkz2013@126.com 
	> Created Time: 2015年08月17日 星期一 07时13分54秒
 ************************************************************************/
 1#include<iostream>
 2#include<iomanip>
 3#include<cstdio>
 4#include<algorithm>
 5#include<cmath>
 6#include<cstring>
 7#include<string>
 8#include<map>
 9#include<set>
10#include<queue>
11#include<vector>
12#include<stack>
13#define y0 abc111qqz
14#define y1 hust111qqz
15#define yn hez111qqz
16#define j1 cute111qqz
17#define tm crazy111qqz
18#define lr dying111qqz
19using namespace std;
20#define REP(i, n) for (int i=0;i<int(n);++i)  
21typedef long long LL;
22typedef unsigned long long ULL;
23const int inf = 0x7fffffff;
24int main()
25{
26    int a[10];
27    int b[5];
28    for ( int i = 1 ; i <= 6 ; i++)
29    {
30	cin>>a[i];
31    }
32    memset(b,0,sizeof(b));
33    for ( int i = 1 ; i <= 6 ; i++)
34    {
35	if (i<=3)
36	{
37	    b[0] = b[0] + a[i] ;
38	}
39	if (i%2==1)
40	{
41	    b[i/2+1] = a[i];
42	}
43    }
44    int ans;
45    ans = b[0]*b[0]-b[1]*b[1]-b[2]*b[2]-b[3]*b[3];
46    cout<<ans<<endl;
	return 0;
}