[SCOI2010]字符串

思路:
设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]字符串的更多相关文章
- Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1194 Solved: 651[Submit][Status][ ...
- BZOJ 1856: [Scoi2010]字符串( 组合数 )
求(0,0)->(n,m)且在直线y=x下方(可以在y=x上)的方案数...同 http://www.cnblogs.com/JSZX11556/p/4908648.html --------- ...
- 1856: [Scoi2010]字符串
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 847 Solved: 434[Submit][Status] D ...
- BZOJ 1856: [Scoi2010]字符串 [Catalan数]
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1418 Solved: 790[Submit][Status][ ...
- 【BZOJ1856】[SCOI2010]字符串(组合数学)
[BZOJ1856][SCOI2010]字符串(组合数学) 题面 BZOJ 洛谷 题解 把放一个\(1\)看做在平面直角坐标系上沿着\(x\)正半轴走一步,放一个\(0\)看做往\(y\)轴正半轴走一 ...
- bzoj 1856: [Scoi2010]字符串 卡特兰数
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1458 Solved: 814[Submit][Status][ ...
- 1856: [Scoi2010]字符串(Catalan数)
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 2117 Solved: 1211[Submit][Status] ...
- BZOJ1856[SCOI2010]字符串
Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...
- 【BZOJ】1856: [Scoi2010]字符串
http://www.lydsy.com/JudgeOnline/problem.php?id=1856 题意:把n个1和m个0组成字符串,要求在组成的字符串中,任意的前k个字符1的个数不能少于0的个 ...
- BZOJ1856 [Scoi2010]字符串 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...
随机推荐
- 用户 'NT AUTHORITY\IUSR' 登录失败
今天在用VS20012发布XAF ASP.NET的程序时,在iis 调用SQLSERVER Express2008数据库时,总是出现错误“用户 'NT AUTHORITY\IUSR' 登录失败”,后来 ...
- 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...
- spine 所有动画的第一帧必须把所有能K的都K上
spine 所有动画的第一帧必须把所有能K的都K上.否则在快速切换动画时会出问题.
- Python在ubuntu下常用开发包名称
build-essential python3-setuptools python-setuptools-doc python3-all-dev python3-wheelwheel时pip支持的一种 ...
- iOS开发之使用AFN上传图片
//1.创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializ ...
- 检查是否是移动端(Mobile)、ipad、iphone、微信、QQ等
<script type="text/javascript"> //判断访问终端 var browser={ versions:function(){ var u = ...
- C++const关键字用法
const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进 ...
- android 面试
2. 横竖屏切换时候 activity 的生命周期1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏 ...
- MySQL 找回密码
Windows: 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant-tables回车.如果没有出现提示信息,那就对了. ...
- [pwm]PWM的输入捕捉模式
对于stm32来说,输入捕捉模式有两种: 普通输入捕捉模式:经常用来测量脉冲宽度和频率,例如测量脉冲宽度,TIM5_CH1来捕获高电平脉宽,首先先设置输入捕获为上升沿触发,然后记录下发生上升沿时TIM ...