机器人走方格 V3

1120 . 机器人走方格 V3

基准时间限制:1 秒 空间限制:65536 KB 分值: 160

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

Input

输入一个数N(2 <= N <= 10^9)。

Output

输出走法的数量 Mod 10007。

Input 示例

4

Output 示例

10

思路:实际是本质就是,n个0,n个1,序列中1的个数小于等于0.
和string是同一类型题。c(n+m,n)-c(n+m,n-1);
这题需要*2;
由于mod = 10007;


 1 /**C(n+m,n)-C(n+m,n-1)**/
2 #include<iostream>
3 #include<stdio.h>
4 #include<cstring>
5 #include<cstdlib>
6 using namespace std;
7 typedef __int64 LL;
8
9 const LL p = 10007;
10 LL dp[10008];
11 void init()
12 {
13 int i;
14 dp[0]=1;
15 for(i=1;i<=10007;i++)
16 dp[i]=(dp[i-1]*i)%p;
17 }
18 LL pow_mod(LL a,LL n)
19 {
20 LL ans=1;
21 a=a%p;
22 while(n)
23 {
24 if(n&1) ans=(ans*a)%p;
25 n=n>>1;
26 a=(a*a)%p;
27 }
28 return ans;
29 }
30 LL C(LL n,LL m)
31 {
32 if(n<m)return 0;
33 if(m>n-m) m=n-m;
34 LL sum1=dp[n];
35 LL sum2=(dp[m]*dp[n-m])%p;
36 sum1 = (sum1*pow_mod(sum2,p-2))%p;
37 return sum1;
38 }
39 LL Lucas(LL n,LL m)
40 {
41 LL ans=1;
42 while(n&&m&&ans)
43 {
44 ans=(ans*C(n%p,m%p))%p;
45 n=n/p;
46 m=m/p;
47 }
48 return ans;
49 }
50 int main()
51 {
52 init();
53 LL n;
54 while(scanf("%I64d",&n)>0)
55 {
56 n=n-1;
57 LL ans=Lucas(n+n,n);
58 LL cur=Lucas(n+n,n-1);
59 ans=ans-cur;
60 if(ans<0) ans=ans+p;
61 ans=(ans*2)%p;
62 printf("%I64d\n",ans);
63 }
64 return 0;
65 }

机器人走方格 V3

时间: 2024-10-17 18:21:03

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

1120 机器人走方格 V3

1120 机器人走方格 V3 基准时间限制:1 秒 空间限制:131072 KB N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果. Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10 思路:这个在对角线的上方,就可以转换为,火车进

51NOD 1120 机器人走方格 V3(卢卡斯定理 + 非降路径)

传送门 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果. Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10 解题思路: 从左上做到右下只能向右护着向下走,就是相当于从左下走到右上的一条非降路径,然后中间加了一些障碍,其实就是从(

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

N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果. Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10 明显是一道卡特兰数,推出ans = C(2*n-2,n-1) * 2 / n % MOD先让n--,ans = C(2*n,n)

51Nod1120 机器人走方格 V3

题目 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果. N<=1e9 思路 卡特兰数+卢卡斯定理+乘法逆元算组合数 卡特兰数:某百科卡特兰数词条讲过这种情况. 卢卡斯定理:组合数,模数很小,逐次拆分 乘法逆元,见前面,此处n+1不能保证和p互质,建议用卡特兰数两组合数相减的公式.(不过数据很弱我写的/(n+1)) 代码 #includ

1122 机器人走方格 V4

1122 机器人走方格 V4 基准时间限制:1 秒 空间限制:131072 KB 四个机器人a b c d,在2 * 2的方格里,一开始四个机器人分别站在4个格子上,每一步机器人可以往临近的一个格子移动或留在原地(同一个格子可以有多个机器人停留),经过n步后有多少种不同的走法,使得每个毯子上都有1机器人停留.由于方法数量巨大,输出 Mod 10^9 + 7的结果. Input 输入1个数N(0 <= N <= 10^9) Output 输出走法的数量 Mod 10^9 + 7 Input示例

51nod 1118 机器人走方格 (小数据用dp)

1118 机器人走方格 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 取消关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) Output 输出走法的数量. Input示例 2 3 Output示例 3 设dp[i][j]表示走到第i行第j列有多少种走法.状态转移

1119 机器人走方格 V2

1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3思路:打个表找个规律,然后发现是组合数,然后取模费马小定理. 1 #in

51nod 1119 机器人走方格 V2 (组合数学+逆元)

1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 分析:因为只能向

1119 机器人走方格 V2(组合)

1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 //挺懵逼的,虽然看出动规后是个杨辉三