zoukankan      html  css  js  c++  java
  • 题解报告: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 }
  • 相关阅读:
    C#中的一些访问修饰符
    Win7下各种Oracle服务的作用
    MySql创建视图
    Sql Server SQL语句创建数据库
    C语言函数指针:获得任意类型数组的最大
    SQLHelper帮助类
    .Net有哪些大型项目、大型网站的案例
    复习一些小知识
    Js作用域与作用域链
    路飞-自定义User表和Media配置
  • 原文地址:https://www.cnblogs.com/acgoto/p/8689211.html
Copyright © 2011-2022 走看看