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)!}\) ...
随机推荐
- 在echarts3中使用字符云
echarts2的官方API里是带有字符云的,但到了echarts3就被从官网上移除了,想要使用的话可以从github上下载: 下载地址:https://github.com/ecomfe/echar ...
- 利用jQuery移除和添加图片
1.样式 <style type="text/css"> .changeImage{ background:url(images/right. ...
- python利用socketserver实现并发套接字功能
本文实现利用python的socketserver这个强大的模块实现套接字的并发 目录结构如下: 测试文件请放在server_file文件夹里面 server.py #!/usr/bin/env py ...
- 01 mysql的安装(windows)
在安装mysql之前,一般是先下载mysql,推荐大家去Oracle的官网下载,而且尽量使用免安装的版本(即压缩版,解压之后就可以使用的版本,不是.exe的安装版本),因为安装版的mysql在安装过程 ...
- 怎么去掉织梦网站首页带的index.html/index.php
方法1. 1)在空间面板里面找到默认首页设置: 我们是需要去掉index.html,这时我们只需要把index.html这个把它移到最顶级去就行,然后点击确定,在打开网站刷新下,就基本可以解决了! 其 ...
- 洛谷 P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- python arvg用法
转自:http://blog.csdn.net/vivilorne/article/details/3863545 在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行 ...
- linux_快照和克隆
什么是快照? 操作虚拟机时候,想保存当前状态为以后操作失误快速那时保存的系统状态,想当于对系统的版本管理,每个节点之间可以互相切换 什么是克隆? 可以选择快照和当前状态,可选择链接克隆和完整克隆 链接 ...
- string用法总结
要想使用标准C++中的string类,必须要包含#include <string> 注意是<string>而不是<string.h>,带.h的是C语言中的头文件 s ...
- Java多线程之线程的创建
好久没有更博客了,最近一直在忙工作的事情.现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉. 关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用线程,线程 ...