luogu1999 高维正方体
神仙题
分析法是个好方法
反正xjb分析就分析出来了
首先,i维立方体的点数(0维元素数)为\(2^i\)
首先0维肯定是1(不就是一个点吗)
你想想你是怎么用点拼成线段的
你把两个点往地上一扔
然后中间连一条线
就完事儿了
然后你再想想你是怎么用线段拼成正方形的
你把两个长度相等的线段 往地上一方 摆成平行且间距等于他们长度 然后不就成了一个正方形了吗
然后你再想想你是怎么用正方形拼成正方体的
把两个全等的正方形 一个放下面 一个放上面 让这两个面平行 且间距等于正方形边长
由此
由i维立方体 拼成i+1维立方体
点数乘以2(因为每次你都是拿两个i维立方体拼成i+1维立方体)
所以i维立方体的点数(0维元素数)为\(2^i\)
然后递推求出i维立方体j维元素数,为了方便我们设为\(f[i][j]\)
则\(f[i][0]=2^i\)(刚才推得)
然后其余的怎么推
不好想
我们考虑i=3的情况
i=3,j=0的时候,\(f[3][0]=8(2^3=8)\)
然后考虑三维的立方体
每个顶点可以延伸出 三条边
而每条边连结2个顶点
根据某原理,\(\displaystyle f[3][1]=\frac{f[3][0]*3}{2}=12\)
然后呢每个边可以延伸出2个面
每个面连接着4个边
所以\(\displaystyle f[3][2]=\frac{f[3][1]*2}{4}=6\)
然后呢每个面 连接着1个正方体
没个正方体 连接6个面
所以 \(\displaystyle f[3][3]=\frac{f[3][2]*1}{6}=1\)
然后就找到规律了
\(\displaystyle f[3][j]=\frac{f[3][j-1]*(4-j)}{2*j}\)
然后呢推广到多维的情况
\(\displaystyle f[i][j]=\frac{f[i][j-1]*(i+1-j)}{2*j}\)
大功告成
复杂度\(O(nm)\)?放气儿
由于我们只求一个数,而且递推方程是在一行上递推的
所以我们先求出\(f[n][0]\)然后\(\displaystyle f[n][i]=\frac{f[n][i-1]*(n+1-i)}{2*i}\)
复杂度\(O(m)\)
由于需要取模
所以除法改为乘法逆元
由于1e9+7是素数
所以用快速幂/fermat小定理
一开始的\(f[n][0]=2^n\)也用快速幂
就行了
时间复杂度乘以一个log
代码
#include <bits/stdc++.h>
using namespace std;
#define p 1000000007
int f[100010], n, m;
int qpow(int x, int y)
{
int ans = 1;
while (y > 0)
{
if (y & 1)
ans = (1LL * ans * x) % p;
x = (1LL * x * x) % p;
y >>= 1;
}
return ans;
}
int main()
{
scanf("%d%d", &n, &m);
f[0] = qpow(2, n);
for (int i = 1; i <= m; i++)
f[i] = (1LL * f[i - 1] * (n - i + 1)) % p * qpow(2 * i, p - 2) % p;
printf("%d\n", f[m]);
return 0;
}
虽然慢了点
但是好分析
吊打各种lucas定理
luogu1999 高维正方体的更多相关文章
- Computer Science Theory for the Information Age-2: 高维空间中的正方体和Chernoff Bounds
高维空间中的正方体和Chernoff Bounds 本文将介绍高维空间中正方体的一些性质,以及一个非常常见也是非常有用的概率不等式——Chernoff Bounds. 考虑$d$维单位正方体$C=\{ ...
- Computer Science Theory for the Information Age-1: 高维空间中的球体
高维空间中的球体 注:此系列随笔是我在阅读图灵奖获得者John Hopcroft的最新书籍<Computer Science Theory for the Information Age> ...
- Computer Science Theory for the Information Age-3: 高维空间中的高斯分布和随机投影
高维空间中的高斯分布和随机投影 (一)在高维球体表面产生均匀分布点的方法 我们来考虑一个采样问题,就是怎样在高维单位球体的表面上均匀的采样.首先,考虑二维的情况,就是在球形的周长上采样.我们考虑如下方 ...
- 3d转换-正方体-Html5Css3-遁地龙卷风
(-1) 写在前面 我用的是chrome49,这个案例是从网上看到的,向这位同行致敬,建议大家在记录自己学习感悟时,向我一样加上笔名,被转载的时候还能留下点东西. 在研究slice-box.js的时候 ...
- CSS实现正方体旋转
代码如下: <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...
- 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)
× 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...
- css3实践之摩天轮式图片轮播+3D正方体+3D标签云(perspective、transform-style、perspective-origin)
本文主要通过摩天轮式图片轮播的例子来讲解与css3 3D有关的一些属性. demo预览: 摩天轮式图片轮播(貌似没兼容360 最好用chrome) 3D正方体(chrome only) 3D标签云(c ...
- SVM支持向量机的高维映射与核函数-记录毕业论文2
上一篇博客将了在数据集线性可分的情况下的支持向量机,这篇主要记录如何通过映射到高维解决线性不可分的数据集和如何通过核函数减少内积计算量的理论思想. [5]径向基函数的核函数:https://www.q ...
- three.js 显示一个绿色的正方体
第一个框架的效果是显示一个绿色的正方体 <!DOCTYPE html> <html> <head> <title></title> < ...
随机推荐
- JavaScript中给对象添加方法
在JavaScript中,我们经常要给已定义的对象添加一些方法,如下: function circle(w,h){ this.width=w; this.height=h; ...
- LNMP 1.3 测试php解析
测试解析LNMP的php解析 先打开nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root html; fas ...
- 【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据
1.MainActivity.java import android.annotation.TargetApi; import android.app.Activity; import android ...
- DAY7-面向对象之继承与派生
一.初识继承 什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代 ...
- LinearLayout线性布局搭配权重属性的使用
在开发中,我们是通过布局来完成应用界面的搭配的,通过各种布局,我们可以完成各种复杂的界面设计.而LinearLayout也就是我们说的线性布局,这个比较简单而且使用很广泛的一种布局.下面我们通过一个D ...
- Tomcat服务器简介
- IE的haslayout
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元 ...
- 2018网络预选赛 徐州H 线段树+树状数组
设读入的数组是a,树状数组用来维护a数组区间和sum,线段树用来维护一个另一个数组ssum的区间和,区间每个点a[i]*(n-i+1),那么l-r的答案是l-r的ssum-(n-r)*(sum[r]- ...
- String/StringBuilder 类 统计字符串中字符出现的次数
1.1. 训练描述:[方法.String类] 一.需求说明:定义如下字符串: String str = “javajfiewjavajfiowfjavagkljjava”; 二.请分别定义方法统计出: ...
- 在Ubuntu里安装Mysql5.7.23
准备在Linux里安装Mysql,安装过程中遇到很多问题,这里记录下我成功安装的过程. 操作系统:Ubuntu 18.04 数据库:Mysql 5.7.23 安装步骤: 1.下载一个apt,下载mys ...