• 题解报告: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 }
  • 相关阅读:
    6、函数、谓词、CASE表达式
    25. k个一组翻转链表
    78. 子集
    72. 编辑距离
    12. 整数转罗马数字
    287. 寻找重复数
    27. 移除元素
    91. 解码方法
    283. 移动零
    198. 打家劫舍
  • 原文地址:https://www.cnblogs.com/acgoto/p/8689211.html
Copyright © 2020-2023  润新知