卡特兰数 BZOJ3907 网格 NOIP2003 栈
卡特兰数:主要是求排列组合问题
1:括号化矩阵连乘,问多少种方案
2:走方格,不能过对角线,问多少种方案
3:凸边型,划分成三角形
NOIP2003 栈
//#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <algorithm>
#include <vector>
// #include<malloc.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define LL long long
const int inf = 0x3f3f3f3f;
const double eps = 1e-;
// const double pi = acos(-1);
const LL MOD = 1e8;
const int N=<<;
// const LL p = 1e9+7;
// inline int r(){
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
// return x*f;
// } int main() {
int n;
LL f[]={};
scanf("%d",&n);
f[]=;f[]=;
for(int i=;i<=n;i++)
for(int j=;j<i;j++)
f[i]+=f[j]*f[i-j-];
printf("%I64d\n",f[n]);
return ;
}
BZOJ3907 网格
/**************************************************************
Problem: 3907
User: Tunix
Language: C++
Result: Accepted
Time:84 ms
Memory:944 kb
****************************************************************/ #include<cstdio>
#include<cstring> typedef long long LL; const int N=;
const LL mod=; int tot=,x[N],p[N],v[N]={};
LL a[],b[]; LL pow(LL x,int p) {
LL t=;for (;p;p>>=,x*=x) if (p&) t*=x;return t;
} void mul(LL a[],LL y) {
LL x=,&l=a[];
for (int i=;i<=l;i++) {
a[i]=a[i]*y+x;
x=a[i]/mod;
a[i]%=mod;
}
while (x) a[++l]=x%mod,x/=mod;
} void dec(LL a[],LL b[]) {
LL &l=a[];
for (int i=;i<=l;i++) {
if (a[i]<b[i]) a[i+]--,a[i]+=mod;
a[i]-=b[i];
}
while (!a[l]) l--;
} void getc(LL a[],int n,int m) {
memset(x,,sizeof x);
for (int i=;i<=n;i++) x[i]++;
for (int i=;i<=m;i++) x[i]--;
for (int i=;i<=n-m;i++) x[i]--;
for (int i=n;i>=;i--)
if (!v[i]) mul(a,pow(i,x[i]));
else x[v[i]]+=x[i],x[i/v[i]]+=x[i];
} void print(LL a[]) {
int l=a[];
printf("%lld",a[l]);
for (int i=l-;i>=;i--) printf("%08lld",a[i]);
printf("\n");
} int main() {
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<=n+m;i++) {
if (!v[i]) p[++tot]=i;
for (int j=,k;j<=tot,(k=p[j]*i)<=n+m;j++) {
v[k]=p[j];
if (i%p[j]==) break;
}
}
a[]=a[]=b[]=b[]=;
getc(a,n+m,n);
getc(b,n+m,n+);
dec(a,b);
print(a);
return ;
}
卡特兰数 BZOJ3907 网格 NOIP2003 栈的更多相关文章
- hdu5816 卡特兰数+dp
题意:共n张无中生有,m张攻击牌.每张攻击牌攻击力已知,敌方有p点血.随机洗牌.游戏开始,己方抽取一张手牌,若是无中生有则可再抽两张牌.求能在第一回合内将敌方杀死的概率. n+m <= 20, ...
- [NOIP2003]栈 题解(卡特兰数)
[NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...
- 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)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左 ...
- NOIP2003pj栈[卡特兰数]
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
- 出栈顺序 与 卡特兰数(Catalan)的关系
一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3 ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...
- 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】
题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...
- CH1102 火车进出栈问题(高精/卡特兰数)
描述 一列火车n节车厢,依次编号为1,2,3,-,n.每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种. 输入格式 一个数,n(n<=60000) 输出格式 一个数s表示 ...
- 【讲●解】火车进出栈类问题 & 卡特兰数应用
火车进出栈类问题详讲 & 卡特兰数应用 引题:火车进出栈问题 [题目大意] 给定 \(1\)~\(N\) 这\(N\)个整数和一个大小无限的栈,每个数都要进栈并出栈一次.如果进栈的顺序为 \( ...
随机推荐
- 1197: [HNOI2006]花仙子的魔法 - BZOJ
Description Input 包含两个整数,并用一个空格隔开,第一个整数表示实施魔法的次数m,第二个整数表示空间的维数n.其中,1≤m≤100,1≤n≤15. Output 仅包含一个整数,表示 ...
- js根据id、pid把数据转为树结构
//格式化树数据 function toTreeData(data) { var pos = {}; var tree = []; var i = 0; while (data.length != 0 ...
- spoj 394
每段可以连续的串的可能性是个Fibonacci数列 但是直接dp更好吧~~ #include <cstdio> #include <cstring> using names ...
- 如何优化 Java 性能?
对于 Java 性能比较关心的同学大概都知道<Java Performance>这本书,一般而言,很多同学在日常写 Java Code 的时候很少去关心性能问题,但是在我们写 Code 的 ...
- 学习记录:浏览器JAVASCRIPT里的WINDOWS,DOCUMNET
看完以下这段话之后,就理解DOCUMNET.READY之类的说法了. 或是JAVASCRIPT的浏览器里更细致的操作DOCUMENT的东西了. DOCUMNET和WINDOWS谁大谁小, 立即执行的匿 ...
- HDU1465+递推
经典的信封装信问题 f[ n ] = ( n-1 ) * ( f[ n-1 ]+f[ n-2 ] ) #include<stdio.h> #include<string.h> ...
- 2013 Multi-University Training Contest 4 Who's Aunt Zhang
看题就知道要用polya,但是当时没做出来,还是不是很熟悉polya!!! 总共有24种置换: 1. 不做任何旋转 K ^ (54 + 12 + 8) 2. 绕相对面中心的轴转 1) 90度 K ^ ...
- JVM内存管理(二)
JVM内存管理 JVM在执行java程序的过程中,会把内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖 ...
- VPN column: PPTP(1)--connecting process
hu_hit原创,如需转载请注明出处.Thanks. 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2. PPTP协议解析: 3. PPTP的路由. 由于我是工 ...
- chrome和火狐获取资源
获取网站数据: chrome下获取网站数据可以用如下方式去获取: 而火狐则可以按以下方式获取: 在该目录下找到你想要的数据. 获取本地的数据: chrome下获取本地的数据: firefox下获取本地 ...