zoukankan      html  css  js  c++  java
  • HDU 1220 简单数学题

    题目大意是

    在魔方上找到有多少对小立方块它们之间连接的点不超过两个

    因为任意两个立方块之间相连的点就只有0,1,2,4 这样4种情况

    那么我们只需要考虑总共的组成立方块对数

    sum = C(2 , n*n*n)  = (n*n*n*(n*n*n-1))/2  在n*n*n个立方块中任选两个组合

    然后减去邻接4个点的情况

    4个点邻接只会出现在两个立方块有公共平面的情况

    我们可以考虑4种情况,用a[4]数组保存

    8个角上的立方块 , 每个都有3个立方块和其邻接

    12个棱上(除去顶角) , 共有12*(n-2) 个立方块 , 每个有4个立方块邻接

    6个面上(除去棱) , 共有6*[n*n - 4(n-1)] 个立方块,每个有5个立方块和其邻接

    内部,视野所不可到达的中心 , 共有(n-2)^3个立方块,每个有6个立方块邻接

    把上述四种情况一加记得除以2,因为你和我邻接与我和你邻接是重复的

    最后sum减去它就是结果

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 int a[4] , sum;
     6 
     7 int get(int n)
     8 {
     9     int t = n*n*n;
    10     sum = t*(t-1) / 2;
    11     a[0] = 8 * 3;
    12     a[1] = 12 * (n-2) * 4;
    13     a[2] = 6 * (n*n - 4*(n-1)) * 5;
    14     a[3] = (n-2)*(n-2)*(n-2)*6;
    15     sum -= (a[0]+a[1]+a[2]+a[3]) / 2;
    16     return sum;
    17 }
    18 
    19 int main()
    20 {
    21     int n;
    22     while(~scanf("%d" , &n)){
    23         if(n == 1)
    24             puts("0");
    25         else{
    26             int ans = get(n);
    27             printf("%d
    " , ans);
    28         }
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    仿windows的嵌入式GUI系统(一)
    入群必看内容。
    嵌入式开发入门(2)
    仿windows消息机制的嵌入式GUI系统(二)(未完)
    使用硬件定时器软模拟多个定时器(8.15改进版)
    Python 文件目录操作
    C/C++ cast
    C/C++ basic
    C/C++ debug
    C++ 引用返回值
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/4184370.html
Copyright © 2011-2022 走看看