• JZOJ5384. 【NOIP2017提高A组模拟9.23】四维世界


    题目

    Description

    众所周知,我们常感受的世界是三维的。
    Polycarp突然对四维空间产生了兴趣,他想对四维空间进行一些研究。但是在此之前,他必须先对三维世界了解透彻。
    于是Polycarp决定从零维,也就是一个点,开始他的研究。
    我们把一个点放在三维空间中,Polycarp把这个点视为原点,并确定了三个正方向。
    他可以把这个点往三个方向之一拉伸一个单位,那么这个点就变为了一维的一条长度为一的线段。
    然后如果他把这条线段往另一方向拉伸一个单位,那么这条线就变为了二维的一个矩形。
    如果继续拉伸可能就会进入三维世界,也就是变为直四棱柱。
    Polycarp认为矩形、线段甚至点都可以看作某一维或某几维为丰的直四棱柱。
    现在Polycarp想演示把一个点一步一步拉伸为边长为n的正六面体的过程,
    但他缺失了m种形态的直四棱柱模具(Polycarp拥有其他的所有直四棱柱模具),他想知道共有多少种演示方案。
    Polycarp的演示过程需要每拉伸一个单位时对应形态的直四棱柱。因为方案数很大,所以输出答案对10^9+7的结果。

    Input

    从文件poly.in中读入数据。
    第一行两个整数n;m,分别表示直四棱柱的边长和他缺失的模具数量。
    接下来m行,第i行三个整数x; y; z,表示第i个缺失模具的长、宽、高。
    2 3
    1 0 1
    1 1 1
    0 2 0

    Output

    输出到文件poly.out中。一个整数,即答案。
    36

    Data Constraint

    题目大意

    求从 (0,0,0) 到 (n,n,n) 不经过某些点的方案数

    题解

    20 分

    暴力 DFS ,不经过一些点,搜到终点 +1
    复杂度:\(O(?)\)

    40 分

    设 F[i][j][k] 为从 (0,0,0) 到 (i,j,k) 的方案数,若不能走就标记一下,初始 F[0][0][0]=1
    复杂度:\(O(n^3)\)

    60 分

    若 m=0 求的是从 (0,0,0) 到 (n,n,n) 的方案数
    由于一共要走 3n 步,方案数为\(C^n_{3n}\bullet C^n_{2n}\bullet C^n_n=\dfrac{(3n)!(2n)!}{n!(2n)!n!n!}=\dfrac{(3n)!}{n!n!n!}\)

    100 分

    我们设 F[i] 为从 (0,0,0) 到第 i 个禁止点不经过其他禁止点的方案数,设第 i 个禁止点为 \((x_i,y_i,z_i)\)
    同 60 分做法,若经过禁止点的方案数为 \(\dfrac{(x_i+y_i+z_i)!}{x_i!y_i!z_i!}\) ,可先算出再减去经过禁止点的方案
    一个经过禁止点的方案肯定有其第一个经过的禁止点。设这个禁止点为 j 。
    那么 j 之前肯定不能经过其他禁止点,只有无论怎么走都行。可得

    \[F_i=\dfrac{(x_i+y_i+z_i)!}{x_i!y_i!z_i!}-\sum_{x_j\le x_i,y_j\le y_i,z_j\le z_i}\dfrac{(x_i-x_j+y_i-y_j+z_i-z_j)!}{(x_i-x_j)!(y_i-y_j)!(z_i-z_j)!} \]

    复杂度:\(O(m^2)\)

    注意
    1. 为了无后效性,请先排序(三关键字)
    2. 如何输出答案:加一个禁止点 (n,n,n) ,最后输出 F[m] ,即不经过所有障碍到 (n,n,n) 的方案
    3. 需要逆元,否则会炸 (OI-WIKI
  • 相关阅读:
    将01字符串转换成数字的办法
    Codeforces Round #180 (Div. 2) AB
    CPU制作过程『转』
    向VECTOR的头部添加元素
    母版页中js操作问题
    操作粘贴板
    XML和关系数据使用XML和数据集类
    XML和关系数据用XML加载数据集
    XPath和XSL转换向XML应用XSL转换
    XML和关系数据从XSD架构创建数据集映射
  • 原文地址:https://www.cnblogs.com/KonjakLAF/p/14224136.html
Copyright © 2020-2023  润新知