杭电ACM1220——Cube~~简单的数学题
2015-06-17 16:00
330 查看
题目的意思是给你一个立方体的棱长 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的代码:
立方体分解之后,只会出现 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; }
相关文章推荐
- 文章标题
- Map类集
- iOS开发中属性最常用的关键字及其定义
- 关于JKAlertDialog在多个视图控制器跳转后不能正常显示的问题的解决--IOS
- Spring整合JMS(三)——MessageConverter介绍
- Java线程池使用说明【比较全面】
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- ORACLE逻辑备份实现数据库迁移遇到的问题
- HDU2485 Destroying the bus stations(最小割---点割)
- Xamarin iOS教程之显示和编辑文本
- 捕捉键盘中断消息
- 常用ANSI控制码表
- 一些有趣的网站
- qemu 在当前OS中运行其它的操作系统
- clips 前端 js 单选按钮与输入框 的配合变化
- Android Application类注意事项
- hdu 1041 (OO approach, private constructor to prevent instantiation, sprintf)
- ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
- JAVA适配器实例讲解
- Android 发展 ------------- Unable to resolve target 'android-19'