BZOJ 3907: 网格 [Catalan数 高精度]
3907: 网格
Time Limit: 1 Sec Memory Limit: 256 MB
Submit: 402 Solved: 180
[Submit][Status][Discuss]
Description
.png)
Input
输入文件中仅有一行,包含两个整数n和m,表示城市街区的规模。
Output
输出文件中仅有一个整数和一个换行/回车符,表示不同的方案总数。
你们出题人有意思吗,变式套上高精度又一道题.....
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e4+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m;
bool notp[N];
int p[N],lp[N];
void sieve(int n){
for(int i=;i<=n;i++){
if(!notp[i]) p[++p[]]=i,lp[i]=p[];
for(int j=;j<=p[]&&i*p[j]<=n;j++){
notp[i*p[j]]=;
lp[i*p[j]]=j;
if(i%p[j]==) break;
}
}
}
struct Big{
int d[N],l;
Big():l(){memset(d,,sizeof(d));d[]=;}
int& operator[](int x){return d[x];}
}a,b;
void Mul(Big &a,int b){
int g=;
for(int i=;i<=a.l;i++){
g+=a[i]*b;
a[i]=g%;
g/=;
}
for(;g;g/=) a[++a.l]=g%;
}
void Minus(Big &a,Big &b){
for(int i=;i<=b.l;i++){
if(a[i]<b[i]) a[i]+=,a[i+]--;
a[i]-=b[i];
}
int p=b.l+;
while(a[p]<) a[p]+=,a[p+]--;
while(a[a.l]==) a.l--;
}
void Print(Big &a){
for(int i=a.l;i>=;i--) printf("%d",a[i]);
} int e[N];
inline void add(int x,int d){
while(x!=){
e[lp[x]]+=d;
x/=p[lp[x]];
}
}
void C(int n,int m,Big &ans){
memset(e,,sizeof(e));
for(int i=n;i>=n-m+;i--) add(i,);
for(int i=;i<=m;i++) add(i,-);
for(int j=;j<=p[];j++) for(;e[j];e[j]--) Mul(ans,p[j]);
}
int main(){
freopen("in","r",stdin);
n=read();m=read();
sieve(n+m);
C(n+m,n,a);
C(n+m,n+,b);
Minus(a,b);
Print(a);
}
BZOJ 3907: 网格 [Catalan数 高精度]的更多相关文章
- POJ 2084 Catalan数+高精度
POJ 2084 /**************************************** * author : Grant Yuan * time : 2014/10/19 15:42 * ...
- HDU 1023 Catalan数+高精度
链接:HDU 1023 /**************************************** * author : Grant Yuan * time : 2014/10/19 15:5 ...
- BZOJ 3907: 网格( 组合数 + 高精度 )
(0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应( ...
- BZOJ 3907: 网格
Description 求不跨过直线 \(y=x\) ,到达 \((n,m)\) 的方案数. Sol 组合数学+高精度. 这个推导过程跟 \(Catalan\) 数是一样的. 答案就是 \(C^{n+ ...
- bzoj 3907: 网格 组合数学
3907: 网格 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 13 Solved: 7[Submit][Status][Discuss] Descr ...
- bzoj 3907 网格 bzoj2822 [AHOI2012]树屋阶梯——卡特兰数(阶乘高精度模板)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 https://www.lydsy.com/JudgeOnline/problem.p ...
- BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 779 Solved: 453[Submit][Status] ...
- BZOJ 3907: 网格【组合数学】
Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过 ...
- 【BZOJ 3907】网格(Catalan数)
题目链接 这个题推导公式跟\(Catalan\)数是一样的,可得解为\(C_{n+m}^n-C_{n+m}^{n+1}\) 然后套组合数公式\(C_n^m=\frac{n!}{m!(n-m)!}\) ...
随机推荐
- hbmy周赛1--B
B - 改革春风吹满地 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- 说说 typedef 的那些事
最近在复习数据结构时,经常看到 typedef 的身影,但始终不清楚 typedef 的用法具体时怎么样的,特地查阅<C Primer Plus 第5版>,并将查到的内容写出来供大家沟通学 ...
- Linux中git的使用
之前在windows中一直采用github的桌面版,库的建立更新都是借助软件的帮助.所使用的的功能也非常局限,仅仅只是创建库再提交自己的代码.至于版本管理.回滚.分支以及git的结构都没有清楚的认识. ...
- android studio升级2.3后出现的问题
报错: Error:Execution failed for task ':app:javaPreCompileDebug'. > Annotation processors must be e ...
- Spark算子--SortBy
转载请标明出处http://www.cnblogs.com/haozhengfei/p/39edcbb10b5076599c0e5609b7136b88.html SortBy--Transforma ...
- 从零开始学习前端JAVASCRIPT — 5、JavaScript基础BOM
1:BOM(Browser Object Model)概念 window对象是BOM中所有对象的核心. 2:window属性(较少用) self:self代表自己,相当于window. windo ...
- maven项目 在eclipse,InteliJ IDEA中的一些问题
转载请注明出处,谢谢! 不论我们用什么ide来编辑我们的代码,最终的产品都会脱离ide来运行:正如燕飞离了巢,正如你离开了家,不期然就会运转出现问题. - 单强 2018年1月26日11:53 大家是 ...
- ThinkPhp_5框架开发【指导】
================================================== ThinkPhp_5环境安装指导 -------------------------------- ...
- ap web
apapplication端吧 应用程序端 也C-S架构Cweb网页端 般封装httpservletrequest和httpservletresponse对象处理些操作 b-s架构
- C# winform页面可视化设计打开失败,提示未能加载程序集或他的一个依赖项,dll错误
这种情况发生在最初项目是x86属性,改成x64后,一些原来dll,页面没有及时更新,导致页面找不到dll, 最简单的解决方式,把项目属性改成AnyCpu,重新编译下,就可以打开可视化设计窗口了.