基准时间限制:1 秒 空间限制:131072 KB
N * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。

 
Input
输入一个数N(2 <= N <= 10^9)。
Output
输出走法的数量 Mod 10007。
Input示例
4
Output示例
10

思路:这个在对角线的上方,就可以转换为,火车进站的问题,火车进站出来的肯定要小于等于进站的,那么也就相当于y>=x;那么就是卡特兰数,然后因为严格上方,所以我们要求的是F(n-1)卡特兰数,然后我们用lucas来求组合数取模。

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<math.h>
7 using namespace std;
8 const int mod = 10007;
9 typedef long long LL;
10 LL N[10008];
11 LL quick(LL n,LL m);
12 LL lucas(LL n,LL m);
13 int main(void)
14 {
15 N[0] = 1;
16 int i,j;
17 for(i = 1; i <= 10007; i++)
18 N[i] = N[i-1]*(LL)i%mod;
19 LL n;
20 scanf("%lld",&n);n--;
21 if(n==0)printf("1\n");
22 else
23 {LL ask = lucas(2*n,n) - lucas(2*n,n-1);
24 ask = ask%mod + mod;
25 printf("%lld\n",2*ask%mod);}
26 return 0;
27 }
28 LL lucas(LL n,LL m)
29 {
30 if(m == 0)return 1;
31 LL x = n%mod;
32 LL y = m%mod;
33 if(y > x)
34 return 0;
35 LL ni = N[x-y]*N[y]%mod;
36 ni =quick(ni,mod-2);
37 ni = ni*N[x]%mod;
38 return ni*lucas(n/mod,m/mod);
39 }
40 LL quick(LL n,LL m)
41 {
42 LL ans = 1;
43 n %= mod;
44 while(m)
45 {
46 if(m&1)
47 ans = ans*n%mod;
48 n = n*n%mod;
49 m>>=1;
50 }
51 return ans;
52 }

1120 机器人走方格 V3的更多相关文章

  1. 51nod 1120 机器人走方格V3

    1120 机器人走方格 V3  基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只 ...

  2. 51nod 1120 机器人走方格 V3 卡特兰数 lucas定理

    N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 100 ...

  3. 51nod 1120 机器人走方格 V3

    N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走. 并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法? 由于方法数量可能很大,只需要输出Mod 1 ...

  4. 1120 机器人走方格 V3(组合数)

    题目实际上是求catalan数的,Catalan[n] = C(2*n,n) / (n+1) = C(2*n,n) % mod * inv[n+1],inv[n+1]为n+1的逆元,根据费马小定理,可 ...

  5. 51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】

    -我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2 卡特兰数使用\( h(n)=\frac{C_{2n}^{n}}{n+1} \)因为范围比较大所以组合数部分用卢卡 ...

  6. 机器人走方格 V3

    1120 . 机器人走方格 V3   基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...

  7. 51nod1120 机器人走方格 V3

    跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了.然后由于n和m太大所以用了lucas定理 //跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了 ...

  8. 51nod_1120:机器人走方格 V3

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1120 Catalan数 基础题,ans=C(2n-2,n-2 ...

  9. 51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1120 题解: 1.看到这种题,马上就想到了卡特兰数.但卡特兰数 ...

随机推荐

  1. oracle 将电话号码中间4位数以星号*代替

    select replace('17665312355',substr('17665312355',4,4),'****')  as phone,                       #类似E ...

  2. python 封装、绑定

    目录 python 封装.绑定 1.数据.方法的封装 2.隐藏属性 3.开放接口 4.绑定方法 1.对象的绑定 2.类的绑定(classmethod) 3.非绑定方法(staticmethod) 4. ...

  3. java中的Arrays类

    今天刚接触了数组,学到了几个比较常用的方法 Fill方法:给数组赋值 sort方法:给数组升序 equals方法:比较数组中元素 值是否相等 binarySearch方法:对排序好的数组进行二分查找法 ...

  4. 巩固javaweb的第二十六天

    正则表达式 正则表达式提供了一种高级的.但不直观的字符串匹配和处理的方法.它描述了一种 字符串匹配的模式,可以用来判断一个字符串是否满足某种格式,或者一个字符串是否含 有某个子串等. 1. 字符集 正 ...

  5. accessory, accident

    accessory 1. belt, scarf, handbag, Penny用rhinestone做的小首饰(Penny Blossom)都是accessory2. With default se ...

  6. Angular 中 [ngClass]、[ngStyle] 的使用

    1.ngStyle 基本用法 1 <div [ngStyle]="{'background-color':'green'}"></<div> 判断添加 ...

  7. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  8. mybatis-plus解析

    mybatis-plus当用lambda时bean属性不要以is/get/set开头,解析根据字段而不是get/set方法映射

  9. MyBatis Collection小记—— 关联查询、递归查询、多字段关联

    经常会用到mybatis的Collection标签来做级联查询或递归查询,现通过一个伪例来简单的说明一下使用中的关键点: 首先先列出三个表,给出一个场景: 1,角色表 t_role( id,name ...

  10. linux vi(vim)常用命令汇总(转)

    前言 首先解析一个vim vi是unix/linux下极为普遍的一种文本编辑器,大部分机器上都有vi的各种变种,在不同的机器上常用不同的变种软件,其中vim比较好用也用的比较广泛.vim是Vi Imp ...