题目的意思是给你一个立方体的棱长 n ,将这个立方体分解成单位长度为1的小立方体。问这个大立方体分解之后的n * n * n个小立方体中有多少对小立方体的公共点不超过2个。
立方体分解之后,只会出现 0, 1, 2, 4个公共点的情况,所以算出所以的对数,然后减去4个公共点的情况就可以解决了。
关键是4个公共点的情况有多少对?
首先是有3个面没有露出来,总共只有8个,也就是那8个顶点,所以有 3 * 8对。
然后是有4个面没有露出来,总共有(n - 2)* 12种,所以有4 * (n - 2)* 12。
然后是有5个面没有露出来,总共有(n - 2)^ 2 * 6种,所以有5 * (n - 2)^ 2 * 6。
最后是有6个面没有露出来,总共有(n - 2)^ 3种,所以有 6 * (n - 2)^ 3。
因为有重复,所以全部加起来还要除以2.
所以,4个公共点的情况有 (3 * 8 + 4 * (n - 2)* 12 + 5 * (n - 2)^ 2 * 6 + 6 * (n - 2)^ 3)/ 2.
下面的是AC的代码:
#include <iostream> using namespace std; int main() { int n; while(cin >> n) { cout << n * n * n * (n * n * n - 1) / 2 - (6 * (n - 2) * (n - 2) * (n - 2) + 24 + 4 * (n - 2) * 12 + 5 * (n - 2) * (n - 2) * 6) / 2 << endl; } return 0; }
时间: 2024-10-22 14:33:51