天天看点

杭电1220 Cube Cube

Cube

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 1672    Accepted Submission(s): 1321

Problem Description Cowl is good at solving math problems. One day a friend asked him such a question: You are given a cube whose edge length is N, it is cut by the planes that was paralleled to its side planes into N * N * N unit cubes. Two unit cubes may have no common points or two common points or four common points. Your job is to calculate how many pairs of unit cubes that have no more than two common points.

Process to the end of file.

Input There will be many test cases. Each test case will only give the edge length N of a cube in one line. N is a positive integer(1<=N<=30).

Output For each test case, you should output the number of pairs that was described above in one line.

Sample Input

1
2
3
        

Sample Output

0
16
297


   
    
     Hint
    Hint
   
    
The results will not exceed int type.
        

Author Gao Bo  

Source 杭州电子科技大学第三届程序设计大赛  

Recommend Ignatius.L   |   We have carefully selected several similar problems for you:   1221  1225  1224  3450  1798    意思是,求n*n*n的正方体内有多少对公共定点不超过2的1*1*1正方块,也就是说求n*n*n的正方体内有多少对不相邻的正方块,可以先求的,在不考虑重复的情况下,共有(n*n*n)*(n*n*n-1)对正方块,考虑每个定点相邻的正方块对数有3对,即减去8*3,在考虑,每个每条棱上每个相邻的有4对,有12 条棱,减去(n-2)*4*12,再考虑每个平面上每个正方块相邻的有5 对,减去(n-2)*(n-2)*5*6,再考虑每个不暴露在外的正方块相邻的有6个,减去(n-2)*(n-2)*(n-2)*6,最后结果再除以2,去掉重复的即可:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
__int64 num1,n,num2,i,j,k,l,m;
int main()
{
	while(scanf("%I64d",&n)!=EOF)
	{
		num1=(n*n*n)*(n*n*n-1);
		num2=8*3+(n-2)*4*12+(n-2)*(n-2)*5*6+(n-2)*(n-2)*(n-2)*6;
		m=num1-num2;
		m/=2;
		printf("%I64d\n",m);
	}
}