思路:

设1为向(1,1)方向走,0为向(1,-1)方向走。那么题意可转化为从(0,0)走到(n+m,n-m)且不能跨过y=0的方案数。总方案数C(n+m,n),然后要减去不合法的即线路通过y=-1的。将线路与y=-1交点的左边沿着y=-1做对称操作,则最后等价于从(0,-2)走到(n+m,n-m)的方案数。因为从(0,-2)

走到(n+m,n-m)需要向上走n-m+2次,一共要走n+m次。设向上向下各走x,y,那么x+y=n+m,x-y=n-m+2得到x=n+1,y=m-1,所以不合法的方案为C(n+m,m-1)。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int mod=;
const int N=;
int n,m,ans,f[][N][N];
void dp(){
// f[n+m][n][m]=1;
int now=;
f[now][n][m]=;
for(int i=n+m-;~i;i--){
now^=;
for(int j=;j<=n;j++){
for(int k=;k<=m;k++){
if(j>k&&k<m) f[now][j][k]+=f[now^][j][k+];
if(j<n) f[now][j][k]+=f[now^][j+][k];
if(f[now][j][k]>=mod) f[now][j][k]-=mod;
}
}
}
printf("%d\n",f[now][][]);
}
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
cin>>n>>m;
if(n<m){puts("");return ;}
dp();
return ;
}

10分dp

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int mod=;
const int N=1e5+;
int n,m,ans,f[][N];
void dp(){
int now=;
f[][]=;
for(int i=;i<=n;i++){
now^=;
for(int j=;j<=min(i,m);j++){
if(i) f[now][j]+=f[now^][j];
if(j) f[now][j]+=f[now][j-];
if(f[now][j]>=mod) f[now][j]-=mod;
}
for(int j=;j<=min(i,m);j++) f[now^][j]=;
}
printf("%d\n",f[now][m]);
}
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
cin>>n>>m;
if(n<m){puts("");return ;}
dp();
return ;
}

30分dp

//ans=C(n+m,n)-C(n+m,m-1){来源折线定理}
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N=2e6+;
const ll mod=;
int n,m;ll ans,fz[N],fm[N];
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
if(!b){d=a;x=;y=;return ;}
exgcd(b,a%b,d,y,x);
y-=a/b*x;
}
ll inv(ll a,ll p){
ll d,x,y;
exgcd(a,p,d,x,y);
return d==?(x%p+p)%p:-;
}
int main(){
cin>>n>>m;
int S=n+m;fz[]=fm[]=;
for(ll i=;i<=S;i++) fz[i]=(fz[i-]*i)%mod;
fm[S]=inv(fz[S],mod);
for(ll i=S-;i;i--) fm[i]=(fm[i+]*(i+))%mod;
ans=(fz[n+m]*fm[n]%mod*fm[m]%mod-fz[n+m]*fm[m-]%mod*fm[n+]%mod+mod)%mod;
cout<<ans;
}

[SCOI2010]字符串的更多相关文章

  1. Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1194  Solved: 651[Submit][Status][ ...

  2. BZOJ 1856: [Scoi2010]字符串( 组合数 )

    求(0,0)->(n,m)且在直线y=x下方(可以在y=x上)的方案数...同 http://www.cnblogs.com/JSZX11556/p/4908648.html --------- ...

  3. 1856: [Scoi2010]字符串

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 434[Submit][Status] D ...

  4. BZOJ 1856: [Scoi2010]字符串 [Catalan数]

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1418  Solved: 790[Submit][Status][ ...

  5. 【BZOJ1856】[SCOI2010]字符串(组合数学)

    [BZOJ1856][SCOI2010]字符串(组合数学) 题面 BZOJ 洛谷 题解 把放一个\(1\)看做在平面直角坐标系上沿着\(x\)正半轴走一步,放一个\(0\)看做往\(y\)轴正半轴走一 ...

  6. bzoj 1856: [Scoi2010]字符串 卡特兰数

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1458  Solved: 814[Submit][Status][ ...

  7. 1856: [Scoi2010]字符串(Catalan数)

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 2117  Solved: 1211[Submit][Status] ...

  8. BZOJ1856[SCOI2010]字符串

    Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...

  9. 【BZOJ】1856: [Scoi2010]字符串

    http://www.lydsy.com/JudgeOnline/problem.php?id=1856 题意:把n个1和m个0组成字符串,要求在组成的字符串中,任意的前k个字符1的个数不能少于0的个 ...

  10. BZOJ1856 [Scoi2010]字符串 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...

随机推荐

  1. CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手冊)

    今天,又一次弄我的个人云主机的环境.准备运营自己用Java写的个人官网等站点. 服务器环境:阿里云CentOS 6.4位 包含以下脚本在内的绝大部分命令和脚本,都是我亲自运行过,靠谱的. 完整的&qu ...

  2. Atitit. Dwr 抛出异常error解决方案

    Atitit. Dwr 抛出异常error解决方案 1. Dwr3的处理机制..setErrorHandler 1 2. remote Mteh  try catch 1 3. 林吧,子好java 处 ...

  3. i2c 协议解析

    1.基本概念 主机            初始化发送,产生时钟信号和终止发送的器件 从机            被主机寻址的器件 发送器        发送数据到总线的器件 接收器        从总 ...

  4. delphi无边框可拖动窗体

    unit UFrmModless; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...

  5. 【Android】14.2 外部文件存储和读取

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 1.基本概念 内部存储的私有可用存储空间一般都不会很大,对于容量比较大的文件,例如视频等,应该将其存储在外部存储设 ...

  6. 常用Linux shell命令汇总

    1.检查远程端口是否对bash开放:echo >/dev/tcp/8.8.8.8/53 && echo "open" 2.让进程转入后台:Ctrl + z 3 ...

  7. android.graphics(1) - Paint, Canvas, drawLine, drawPoint, drawRect, drawRoundRect, drawCircle, drawOval, drawArc

    一.Paint与Canvas 像我们平时画图一样,需要两个工具,纸和笔.Paint就是相当于笔,而Canvas就是纸,这里叫画布. 所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明 ...

  8. Django rest_framework 认证源码流程

    一.请求到来后,都要先执行dispatch方法 dispatch根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 def d ...

  9. shell学习笔记之控制结构(三)

    1.if语句 if condition then statements esle statements fi 例: #!/bin/sh echo "Is it morning? Please ...

  10. love2d--glsl03噪声

    由于一些glsl的教程都是3d的,而love是2d的,所以之后以示例为主,我会收集 一些love的shader,分类讲解. 此文简译自love2d社区博客,这里略去作者的自我介绍. 像素着色器入门 示 ...