Description

某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m。现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的点,即任何途径的点(x, y)都要满足x >= y,请问在这些前提下,到达B(n, m)有多少种走法。

Input

输入文件中仅有一行,包含两个整数n和m,表示城市街区的规模。

Output

输出文件中仅有一个整数和一个换行/回车符,表示不同的方案总数。

Data Constraint

50%的数据中,n = m,在另外的50%数据中,有30%的数据:1 <= m < n <= 100

100%的数据中,1 <= m <= n <= 5 000

Solution

首先,我们不考虑这条线的情况,则从(0,0)走到(n,m)的方案数则为\(C_{m+n}^{m}\)

而我们现在只需要考虑非法的情况

因为不能超过y=x的直线,所以其实相当于不能碰到y=x+1这条线

做出(n,m)关于y=x+1的对称点M

则M(m-1,n+1)

从(0,0)走到(n,m)的非法方案相当于从 (0,0)走到M的方案,即\(C^{m-1}_{n+m}\)

则答案则为

\[ans=C_{m+n}^{m}-C_{m+n}^{m-1}
\]
\[=\frac{(m+n)!}{m!\times n!}-\frac{(m+n)!}{(m-1)!\times (n+1)!}
\]
\[=\frac{(m+n)!\times (n+1)}{m!\times (n+1)!}-\frac{(m+n)!\times m}{m!\times (n+1)!}
\]
\[=\frac{(m+n)!\times (n+1-m)}{m!\times (n+1)!}
\]
\[=\frac{(n+2)\times (n+3)\times...\times(m+n)\times (n+1-m)}{m!}
\]

答案过大,要高精度处理

作者不会高精度除高精度,所以直接从2~m一个个的除

友情提示:高精度不压位会T飞,请慎重考虑

Code

#include <cstdio>
#define MO 1000000000
using namespace std;
int n,m,i,x;
long long a[100001],b[100001],c[100001];
void cheng(int w)
{
int t=w,x;a[0]=0;
while (t)
{
a[++a[0]]=t%MO;
t/=MO;
}
for (int i=1;i<=c[0];i++)
{
x=0;
for (int j=1;j<=a[0];j++)
{
b[i+j-1]+=c[i]*a[j]+x;
x=b[i+j-1]/MO;
b[i+j-1]%=MO;
}
b[i+a[0]]=x;
}
c[0]+=a[0];
if (!b[c[0]]) c[0]--;
for (int i=1;i<=c[0];i++)
c[i]=b[i],b[i]=0;
}
void chu(int w)
{
long long t=0,x=0;
for (int i=c[0];i>=1;i--)
{
t=t*MO+c[i];
c[i]=t/w;
t=t%w;
}
while (!c[c[0]])c[0]--;
}
int main()
{
scanf("%d%d",&n,&m);
c[1]=n+2;c[0]=1;
for (i=n+3;i<=n+m;i++)
{
cheng(i);
}
cheng(n-m+1);
for (i=2;i<=m;i++)
{
chu(i);
}
printf("%lld",c[c[0]]);
for (i=c[0]-1;i>=1;i--)
{
printf("%09lld",c[i]);
}
}

jzoj 3431. 【GDOI2014模拟】网格的更多相关文章

  1. 【GDOI2014模拟】JZOJ2020年8月14日T2 网格

    [GDOI2014模拟]JZOJ2020年8月14日T2 网格 题目 Time and Memory Limits Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标 ...

  2. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  3. 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器

    [GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...

  4. 【GDOI2014模拟】网格

    题目 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的 ...

  5. [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)

    题目链接: https://jzoj.net/senior/#main/show/6092 题目: 知识点--平面图转对偶图 在求最小割的时候,我们可以把平面图转为对偶图,用最短路来求最小割,这样会比 ...

  6. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

  7. [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)

    题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ...

  8. [jzoj 6093] [GDOI2019模拟2019.3.30] 星辰大海 解题报告 (半平面交)

    题目链接: https://jzoj.net/senior/#contest/show/2686/2 题目: 题解: 说实话这题调试差不多花了我十小时,不过总算借着这道题大概了解了计算几何的基础知识 ...

  9. [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)

    题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...

随机推荐

  1. 每日一道 LeetCode (14):数组加一

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  2. DRF内置认证组件之自定义认证系统

    自定义token认证 我们知道,在django项目中不管路由以及对应的视图类是如何写的,都会走到 dispatch 方法,进行路由分发, 在阅读 APIView类中的dispatch 方法的源码中,有 ...

  3. JavaScript学习系列博客_10_JavaScript中的while语句

    循环语句 - while循环 - 语法: while(条件表达式){ 语句... } - 执行流程: while语句在执行时,会先对条件表达式进行求值判断, 如果判断结果为false,则终止循环 如果 ...

  4. postman with xdebug

    Set the url with ?XDEBUG_SESSION_START=PHPSTORM and set a header Cookie: XDEBUG_SESSION=PHPSTORM

  5. scp 转

    linux之cp/scp命令   名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明 ...

  6. 如何简洁优雅地部署PostgreSQL和Pgweb?

    本文转自Rancher Labs 介绍PostgreSQL和Pgweb PostgreSQL是一款以可靠性和性能为人所熟知的开源数据库.它在很多行业和应用程序中都有应用,尤其是web开发人员的最爱.从 ...

  7. Docker 镜像构建之 docker commit

    我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求.尽管已经从繁琐的部署工作中解放出来,但是实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完 ...

  8. CSS 段落/换行/缩进

    CSS 段落/换行/缩进 1.盒模型 box-sizing: content-box|border-box|inherit; content-box(默认) : 实际宽度/高度 = width/hei ...

  9. 科普,想成为厉害的 Java 后端程序员,你需要懂这 13 个知识点

    老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 站 ...

  10. Java面试题(异常篇)

    异常 74.throw 和 throws 的区别? throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理.而throw则是指 ...