zoukankan      html  css  js  c++  java
  • [BZOJ 1856][Scoi2010]字符串

    1856: [Scoi2010]字符串

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 1763  Solved: 1002
    [Submit][Status][Discuss]

    Description

    lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数。现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗?

    Input

    输入数据是一行,包括2个数字n和m

    Output

    输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数

    Sample Input

    2 2

    Sample Output

    2

    HINT

    【数据范围】
    对于30%的数据,保证1<=m<=n<=1000
    对于100%的数据,保证1<=m<=n<=1000000

    Source

    题解

    总方案数是 $inom{n+m}{n}$ , 不合法方案数 $inom{n+m}{m-1}$ , 推出阶乘表之后就可以求了

    还记得某BZOJ的网格...就是这个题的高精版...

    参考代码

    GitHub

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <iostream>
     5 #include <algorithm>
     6 
     7 const int MAXN=2e6+10;
     8 const int MOD=20100403;
     9 
    10 int n,m;
    11 int fact[MAXN];
    12 
    13 int C(int,int);
    14 int Pow(int,int,int);
    15 
    16 int main(){
    17     scanf("%d%d",&n,&m);
    18     fact[0]=1;
    19     for(int i=1;i<=n+m;i++){
    20         fact[i]=1ll*fact[i-1]*i%MOD;
    21     }
    22     printf("%d
    ",int(((C(n+m,n)-C(n+m,m-1))%MOD+MOD)%MOD));
    23     return 0;
    24 }
    25 
    26 inline int C(int n,int m){
    27     return 1ll*fact[n]*Pow(fact[m],MOD-2,MOD)%MOD*Pow(fact[n-m],MOD-2,MOD)%MOD;
    28 }
    29 
    30 inline int Pow(int a,int n,int p){
    31     int ans=1;
    32     while(n>0){
    33         if((n&1)!=0){
    34             ans=1ll*ans*a%p;
    35         }
    36         a=1ll*a*a%p;
    37         n>>=1;
    38     }
    39     return ans;
    40 }
    Backup

  • 相关阅读:
    css位置相关元素
    用smarty模板做的登录
    时间查询插件
    smarty 总结和分析
    手风琴特效
    Mysql 知识点总结
    Javascript实现图片的预加载的完整实现
    phpcms 列表页中调用其下的所有子栏目(或特定的子栏目)的方法
    phpcms v9表单实现问答咨询功能
    Cocos2d-x学习之 整体框架描述
  • 原文地址:https://www.cnblogs.com/rvalue/p/7658321.html
Copyright © 2011-2022 走看看