题解报告:hdu 1220 Cube

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1220

问题描述

  Cowl擅长解决数学问题。 有一天,一位朋友问他这样一个问题:给你一个边长为N的立方体,它被与其侧面平行的平面切割成N * N * N个单位立方体。 两个单位立方体可能没有共同点或两个共同点或四个共同点。 你的工作是计算有多少对不超过两个公共点的单位立方体。处理到文件的结尾。  

输入

  会有很多测试用例。 每个测试用例只会在一行中给出一个立方体的边长N. N是正整数(1 <= N <= 30)。  

输出

   对于每个测试用例,您应该在一行中输出上面描述的对的数量。  

示例输入 1    2    3  

示例输出 0   16   297

暗示 :结果不会超过int类型。

解题思路:这是一道组合数学题。题目的意思就是有一个N*N*N的立方体,将其分成1*1*1的单位立方体,则任意两个立方体的交点(顶点)个数为0,1,2,4个,现在要求交点数小于等于2个的立方体对数有多少对。N*N*N的立方体可以分成N*N*N个单位立方体,而任选两个立方体组成的情况一共有C(N*N*N,2)对 (即:N^3*(N^3-1)/2对)。公共点为4的对数:一列有n-1对(n个小方块,相邻的两个为一对符合要求),一个面的共有 n^2列,选上面和左面,前面三个方向,同理可得,故总数为:3*n*n*(n-1)。所以不超过两个公共点的单位立方体的对数为N^3*(N^3-1)/2-3*n*n*(n-1)。

AC代码:

1 #include<bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5     int n;
6     while(cin>>n)
7         cout<<(n*n*n*(n*n*n-1)/2-3*n*n*(n-1))<<endl;//推导公式
8     return 0;
9 }
原文地址:https://www.cnblogs.com/acgoto/p/8689211.html