[恢]hdu 1220
2011-12-27 14:25:01
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1220
题意:一个n*n*n的立方体,被切割成1*1*1的小块。两两配对,问两块公共点不超过2的对数。
mark:先算出总对数,减去共面的对数。顶点8个,每个共面3对,棱12条,每条有n-2个方块,每个方块共面4对,非顶点非楞的面上小方块,每个共面5对,一共6个面,每个面有(n-2)^2个这样的小方块。剩下的内部小方块每个共面6对。最后总共面数要除以2,因为每对算了2次。
代码:
# include <stdio.h>
int calc (int n)
{
int a = 8, b = (n-2)*12, c = (n-2)*(n-2)*6 ;
int d = n*n*n-(a+b+c) ;
return a*3+b*4+c*5+d*6 ;
}
int main ()
{
int n, sum ;
while (~scanf ("%d", &n))
{
if (n == 1){
puts ("0") ;
continue ;
}
sum = n*n*n ;
sum = sum * (sum-1) / 2 ;
printf ("%d\n", sum - calc(n)/2) ;
}
return 0 ;
}