天天看點

杭電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);
	}
}