这是一道无比涨姿势的题目

首先总结一下这种输入几个数的题目,

一般不是递推就是数学题

显然,这道题用递推是无法做到O(n)的复杂度的

那我们就考虑这是一道数学题了

我已开始纠结在正向思维了,正向求好像确实不容易;

某牛的报告点醒了我,我们设符合条件的序列为x,不符合的为y

则x+y=c(n+m,n);

现在我们只要求出y即可

然后弱渣的我又卡住了,

还是大牛的报告引用:我们不妨将0看做-1,那么对于一个不合法的序列,必然存在一个位置使得前缀和为-1,我们设这个最小的位置为k,即:a1+a2+……ak=-1,那么前缀和k-1为0,且ak=-1。接着,若我们将所有n+m个的这前k个数字取反,那么得到一个新的数列含有n+1个1和 m-1个-1,这个新的数列有C(n+m,n+1)种。不合法序列与新构造的这个序列是一一对应的关系。

太神了。怎么想到的orz

所以,ans=c(n+m,n)-c(n+m,n+1);

因为n>m, 所以c(m+n,n)-c(n+m,n+1);

(其实现在来看,这就是一个经典的卡特兰数的模型的变形)

由于是组合还需要取模,就要涉及到除法取模;

能回避除法取模的递推法(杨辉三角)复杂度肯定会TLE,

然后我又涨姿势了,

a/b ≡ac (mod p);

bc ≡1 (mod p) 我们把c叫做b的乘法逆元;

一个数a除以另一个数b同余于a乘以b的乘法逆元模p

怎么证呢?

我们把乘法逆元的式子变换一下得 bc=pk+1 k∈Z

则b=(pk+1)/c

则a/b=a*c*(pk+1)≡ac (mod p)

乘法逆元存在的充要条件是gcd(b,p)=1

由于p=20100403>n+m,且是一个质数

显然gcd(b,p)=1;

那么怎么求乘法逆元呢?

看到之前的变换式我们也不难想到,扩展欧几里得

这道题唯一让我欣慰的地方就是,扩展欧几里得写对了……

 const mo=;
var ans:int64;
    n,m,i:longint; procedure exgcd(a,b:int64;var x,y:int64);
  var xx,yy:int64;
  begin
    if b= then
    begin
      x:=;
      y:=;
    end
    else begin
      exgcd(b,a mod b,x,y);
      xx:=x;
      yy:=y;
      x:=yy;
      y:=xx-a div b*yy;
    end;
  end; function re(a,p:int64):int64;
  var x,y:int64;
  begin
    exgcd(a,p,x,y);
    x:=(x+mo) mod mo;
    exit(x);
  end; function get(x:int64):int64;
  var i:int64;
  begin
    i:=;
    get:=;
    while i<x do
    begin
      inc(i);
      get:=get*i mod mo;
    end;
  end; function c(x,y:int64):int64;
  var a,b,d:int64;
  begin
    a:=get(x);
    b:=get(y);
    d:=get(x-y);
    c:=a*re(b,mo) mod mo*re(d,mo) mod mo;
  end; begin
  readln(n,m);
  ans:=c(n+m,n)-c(n+m,n+);
  ans:=(ans+mo) mod mo;
  writeln(ans);
end.

bzoj1856的更多相关文章

  1. BZOJ1856 [Scoi2010]字符串 数论

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

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

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

  3. BZOJ1856[SCOI2010]字符串

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

  4. [BZOJ1856][SCOI2010]字符串(组合数学)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1856 分析:http://www.cnblogs.com/jianglangcaiji ...

  5. bzoj千题计划299:bzoj1856: [Scoi2010]字符串

    http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...

  6. BZOJ1856或洛谷1641 [SCOI2010]生成字符串

    BZOJ原题链接 洛谷原题链接 可以将\(1\)和\(0\)的个数和看成是\(x\)轴坐标,个数差看成\(y\)轴坐标. 向右上角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(+1\),表示 ...

  7. 2018.09.25 bzoj1856: [Scoi2010]字符串(组合数学)

    传送门 如果有n==m的条件就是卡特兰数. 但现在n不一定等于m. 我们可以考虑用求卡特兰数一样的方法来求答案. 我们知道有一种求卡特兰数的方法是转到二维平面求答案. 这道题就可以这样做. 我们将这个 ...

  8. BZOJ1856: [Scoi2010]字符串(组合数)

    题意 题目链接 Sol \(30 \%\)dp: \(f[i][j]\)表示放了\(i\)个\(1\)和\(j\)个\(0\)的不合法方案 f[0][0] = 1; cin >> N &g ...

  9. BZOJ1856:[SCOI2010]字符串——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1856 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还 ...

随机推荐

  1. RHEL 7.2 安装Oracle XE-11.2.0

    轻量快捷版本,适合开发 0. /etc/hosts 添加 本机hostname # hostnamepromote.cache-dns.local # cat /etc/hosts127.0.0.1 ...

  2. 51nod1417 天堂里的游戏

    ---恢复内容开始--- 1417 天堂里的游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 多年后,每当Noder看到吉普赛人,就会想起那个遥 ...

  3. sublime 设置localhost 2

    最近sidebar用不了了,提示更新然后就自动卸载了: 研究了下其他方式实现: Sublime Text 2 Sublime Text 3 都可以使用: 菜单 --> Tools --> ...

  4. JavaScript 高级程序设计 01-基本概念

    一.JavaScript组成 1.一个完成JavaScript是由ECMAScript.DOM.BOM三部分组成的. ECMAScript:提供核心语言功能--语法.类型.语句.关键字.保留字.操作符 ...

  5. wampsever在win10中安装扩展掉坑

    1.必须要退出wampserver 2.php pecl + 3.wampserver 64 3.0.6

  6. Pandas之容易让人混淆的行选择和列选择

    在刚学Pandas时,行选择和列选择非常容易混淆,在这里进行一下讨论和归纳 本文的数据来源:https://github.com/fivethirtyeight/data/tree/master/fa ...

  7. Linux中Kill进程的N种方法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx ...

  8. Java中的break与continue区别

    break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...

  9. Oracle数据库-建库、建表空间,建用户

    Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来说,为了避免麻烦,可以用'Database Configuration Assistan ...

  10. NOSQL Mongo入门学习笔记 - MongoDB的安装(一)

    手上的工作不是很忙,所以来学习学习很久就像接触的MongoDb,无奈前段时间工作时间都比较多.记录在这里供以后参考 环境: Centos 7 64位 开始: 1. 在官网下载Mongo : wget  ...