BZOJ3907网格
这东西是拿Cat思想搞得组合数学。
首先做这个需要会用网格法或折线法分析Cat的$C_{2n}^n-C_{2n}^{n-1}$是怎么来的。
网格法:假如没有限制,从(0,0)到(n,n)的方案数为$C_{2n}^n$,就是一共有2n次操作位置(向右或向上),我们把向上走的操作插入这些位置即得上式,上面的黄线是当我们走到不合法情况时所碰到的第一条线,然后最终我们会走到(n,n)这个点,如果我们将矩形沿着这条线翻折,我们碰到黄线,然后走到(n,n)的走法,可以映射为碰到黄线,然后走到(n-1,n+1)的走法,因为对称嘛。
而我们碰到黄线之前的走法在矩阵翻折中是不受影响的,这样,不合法方案数就是从(0,0)走到(n-1,n+1)的方案数,这个分析和上面差不多,总共$C_{2n}^{n-1}$种,全部的减去不合法的,就是合法的,$C_{2n}^n-C_{2n}^{n-1}$。
折线法:就是从(0,0)到(2n,0),每次只能沿y=x或y=-x走一个单位,最后图像整体没有位于x下方的部分的方案数。没有限制的话,总方案数为$C_{2n}^n$,因为可以把折线拆成2n段,那么有n段上扬,n段下跌。不能越过x轴,从第一次碰到y=-1这条线开始就不合法了,我们把这个点以后的折线沿y=-1翻折,由于最后到达(2n,0)点,翻折后就到达(2n,-2),此时问题转化为从(0,0)到(2n,-2)的方案数,有n段,n-1段上扬,n+1段下跌,方案数$C_{2n}^{n-1}$,全部的减去不合法的,就是合法的,$C_{2n}^n-C_{2n}^{n-1}$。
那这个题就简单多了,同样用上面的方法,把一个n换成m就差不多了
答案就是$C_{n+m}^n-C_{n+m}^{m-1}$,下面的代码是化简后的式子,没有高精减,高精除用唯一分解刚过去,而且时间复杂度也还好,就打的n√n的拆分,n的拆分(我自己证的,可能是假的)在下一篇博客里,(因为那个题√n拆过不去QAQ)。
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
int n,m;
int prime[],prime_num;
bool v[];
int fz[],fm[];
struct Bigint{
int a[],len;
void clear(){
memset(a,,sizeof(a));
a[]=;
len=;
}
friend void operator * (Bigint &x,int y){
int delta=;
for(int i=;i<=x.len;i++){
x.a[i]=x.a[i]*y+delta;
delta=x.a[i]/;
x.a[i]%=;
}
while(delta>){
x.a[++x.len]=delta%;
delta/=;
}
while(x.a[x.len]==&&x.len>)
x.len--;
}
void out(){
for(int i=len;i>=;i--)
printf("%d",a[i]);
}
}ans;
void doprime(){
for(int i=;i<=;i++){
if(!v[i]) prime[++prime_num]=i;
for(int j=;j<=prime_num&&i*prime[j]<=;j++){
v[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
}
void mulfz(int x){
for(int i=;i<=prime_num;i++)
while(x%prime[i]==){
fz[i]++;
x/=prime[i];
}
}
void mulfm(int x){
for(int i=;i<=prime_num;i++)
while(x%prime[i]==){
fm[i]++;
x/=prime[i];
}
}
int main(){
scanf("%d%d",&n,&m);
doprime();ans.clear();
for(int i=;i<=n+m;i++)
mulfz(i);
mulfz(n-m+);
for(int i=;i<=m;i++)
mulfm(i);
for(int i=;i<=n+;i++)
mulfm(i);
/*for(int i=1;i<=prime_num;i++)
cout<<prime[i]<<" ";cout<<endl;*/
for(int i=;i<=prime_num;i++){
for(int j=;j<=fz[i]-fm[i];j++)
ans*prime[i];
}
ans.out();
puts("");
return ;
}
BZOJ3907网格的更多相关文章
- 卡特兰数 BZOJ3907 网格 NOIP2003 栈
卡特兰数 卡特兰数2 卡特兰数:主要是求排列组合问题 1:括号化矩阵连乘,问多少种方案 2:走方格,不能过对角线,问多少种方案 3:凸边型,划分成三角形 4:1到n的序列进栈,有多少种出栈方案 NOI ...
- bzoj3907 网格 & bzoj2822 [AHOI2012]树屋阶梯——卡特兰数+高精度
题目:bzoj3907:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 bzoj2822:https://www.lydsy.com/Jud ...
- BZOJ3907 网格 卡特兰数
题目描述 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m. 现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左 ...
- bzoj3907: 网格
http://www.cnblogs.com/Tunix/p/4354348.html #include<cstdio> #include<cstring> #include& ...
- HZOJ 20190818 NOIP模拟24题解
T1 字符串: 裸的卡特兰数题,考拉学长讲过的原题,就是bzoj3907网格那题,而且这题更简单,连高精都不用 结论$C_{n+m}^{n}-C_{n+m}^{n+1}$ 考场上10min切掉 #in ...
- C#中如何创建PDF网格并插入图片
这篇文章我将向大家演示如何以编程的方式在PDF文档中创建一个网格,并将图片插入特定的网格中. 网上有一些类似的解决方法,在这里我选择了一个免费版的PDF组件.安装控件后,创建新项目,添加安装目录下的d ...
- pcl曲面网格模型的三种显示方式
pcl网格模型有三种可选的显示模式,分别是面片模式(surface)显示,线框图模式(wireframe)显示,点模式(point)显示.默认为面片模式进行显示.设置函数分别为: void pcl:: ...
- 从点云到网格(三)Poisson重建
Possion重建是Kazhdan等2006年提出的网格重建方法[1].Possion重建的输入是点云及其法向量,输出是三维网格.Poisson有公开的源代码[2].PCL中也有Poisson的实现. ...
- 从点云到网格(二)VRIP介绍
VRIP(Volumetric Range Image Processing),顾名思义,是从深度图重建网格的一种方法.VRIP是Brian Curless和Marc Levoy在1996年提出来的方 ...
随机推荐
- 改善C#程序的方法
写在开头: http://www.cnblogs.com/luminji 157个建议_勘误表 一:属性 属性和方法一样.也可以是virtual和abstract. 条款2:运行时常量(read ...
- JDBC 复习4 批量执行SQL
1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2
https://www.bbsmax.com/A/gAJG67OXzZ/ 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASP ...
- node - path路径
1.node命令路径与js文件路径 node命令路径为node命令所执行的目录,js文件路径指的是你要运行的js所在的目录. 如上图所示: server.js路径为E:\zyp: node命令路径我们 ...
- 周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless
Jerry一直认为,金庸的<天龙八部>里的武学建模已经有点脱离传统武侠小说的范畴了,像已经走上玄幻道路的灵鹫宫"八荒六合唯我独尊功",以及杀伤力足够能被视为现代激光武器 ...
- MyBatis-Spring 学习笔记一 SqlSessionFactoryBean以及映射器类
MyBatis-Spring 是一个用来整合 MyBatis 和 Spring 框架的小类库,通过这个jar包可以将 MyBatis 代码地整合到 Spring 中. 使用这个类库中的类, Sprin ...
- 02 WIndows编程——危险的sizeof
C语言中,对 sizeof() 的处理都是在编译阶段进行. 下面代码,注意可变参数是怎么使用的 #include<Windows.h> #include<stdio.h> in ...
- JavaScript(js)概述
一.特点: JavaScript和java并没有直接关系,就像雷锋与雷峰塔似的没有联系: js是面向对象的,是运行在浏览器端的编程语言: 主要解决的是前端与用户的交互问题,包括交互数据. 二.js引入 ...
- “高可用性”(High Availability)??
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性. 计算机的高可用性 计算机系统的可用性用平均无故障时间(MTTF)来度量 ...
- python自动生成Docx(docxtpl库)
python这个库很有用,可以格式化生成报告等. 其他内容请点此处,下面只写docxtpl的功能代码. # coding: utf-8 import web # 我们用的webpy框架 import ...