hdu5698瞬间移动-(杨辉三角+组合数+乘法逆元)
瞬间移动
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2404 Accepted Submission(s):
1066
行第m
列的格子有几种方案,答案对1000000007
取模。
两个整数n,m(2≤n,m≤100000)

矩阵从a【1】【1】开始,先枚举题目的少数答案:
0 0 0 0 0 0 0
0 1
0 3 6
0 3 15 21
0 1 20 35 56
0 1 5 15 35 70 126
0 6 21 56 126 252 显然斜着看是一个杨辉三角。
从左上到右下看作一行一行,从左下到右上数该行第几个。
C(x,y) 斜着看,第x行y个
杨辉三角有效部分可用组合数表示为
(0,0) (1,1) (2,2) (3,3) (4,4) (5,5)
(1,0) (2,1) (3,2) (4,3) (5,4)
(2,0) (3,1) (4,2) (5,3)
(3,0) (4,1) (5,2)
(4,0) (5,1)
(5,0)
输入n,m表示n行m列。对应到组合数里。选择杨辉三角部分。
a[n][m]
(2,2) (2,3) (2,4) (2,5) (2,6)
(3,2) (3,3) (3,4) (3,5) (3,6)
(4,2) (4,3) (4,4) (4,5) (4,6)
(5,2) (5,3) (5,4) (5,5) (5,6)
(6,2) (6,3) (6,4) (6,5) (6,6)
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const ll p=1e9+; ll fact[]; void init()
{
memset(fact,,sizeof(fact));
fact[]=fact[]=;
for(ll i=;i<;i++)
fact[i]=fact[i-]*i%p; } ll power(ll a,ll b,ll p)
{
ll res=;
while(b)
{
if(b%)
res=res*a%p;
b=b/;
a=a*a%p;
}
return res%p;
} ll C(ll n, ll m ,ll p)
{ ///C(n,m) = n! / ( m!*(n-m)! )
///数据太大肯定爆,p又是素数。换成求m!*(n-m)!的逆元,又不能一起求,会爆数据,分开求,看做n!/m! * 1/(n-m)!
///由于是对p求模,n,m范围在阶乘表范围里
if(m>n)
return ;
return fact[n] * power(fact[m], p-, p)%p * power(fact[n-m], p-, p) % p;
///fact * power * power 可能爆long long,第二次就要取模
} int main()
{
init();
ll n,m;
while(scanf("%lld%lld",&n,&m)!=EOF)
{
ll ans=C(n+m-,m-,p);
printf("%lld\n",ans);
}
return ;
}
hdu5698瞬间移动-(杨辉三角+组合数+乘法逆元)的更多相关文章
- hdu5698瞬间移动(杨辉三角+快速幂+逆元)
瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- hdu 5698(杨辉三角的性质+逆元)
---恢复内容开始--- 瞬间移动 Accepts: 1018 Submissions: 3620 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...
- 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)
题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...
- 【考试记录】4.8 Table ( 数论数学 --组合数 & 杨辉三角)
陆陆续续的开始考很多的试,也会更新这些题目记录下来,免得做完了之后毫无印象,就这么水过去了(以前的考试都是如此,哎……) Table (T1) : 样例: 出于对数学题本能的恐惧考场上放弃了此题专攻T ...
- java实现组合数_n!_杨辉三角_组合数递推公式_回文数_汉诺塔问题
一,使用计算机计算组合数 1,设计思想 (1)使用组合数公式利用n!来计算Cn^k=n!/k!(n-k)!用递推计算阶乘 (2)使用递推的方法用杨辉三角计算Cn+1^k=Cn^k-1+Cn^k 通过数 ...
- POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]
Irrelevant Elements Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2407 Accepted: 59 ...
- [noip2016]组合数问题<dp+杨辉三角>
题目链接:https://vijos.org/p/2006 当时在考场上只想到了暴力的做法,现在自己看了以后还是没思路,最后看大佬说的杨辉三角才懂这题... 我自己总结了一下,我不能反应出杨辉三角的递 ...
- 51nod 1119【杨辉三角】
思路: = =杨辉三角的应用,组合数的应用: C(N+M,N); 逆元一发,费马小定理,OK. #include <stdio.h> #include <string.h> # ...
随机推荐
- 神州数码广域网PPP封装PAP认证配置
实验要求:熟练掌握PAP认证配置(单向.双向) 拓扑如下: 单向 R1(验证方) enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/ ...
- Gym - 100796I:Shell Game(圆台的最大内接球半径)
pro:如题.给定上圆半径r,下圆半径R,高度h.问最大内接球半径. sol:由对称性,我们放到二维来看,即给这么一个梯形,问最大内接圆半径. 证明:如果是一个三角形的内接圆C,他内切于三边. 现在这 ...
- SQL-记录创建篇-006
创建记录: 自己添加记录: insert into table_name values(12,'张三',22) , values(1,'王五',32) insert into table_name(n ...
- python------SocketServer (0809)
socket(一对一) 与socketserver 一.socketserver 1. 正式定义:The socketserver module simplifies the task of writ ...
- 使用ssh服务管理远程主机
- PythonStudy——字典 Dictionary
# 容器(集合):存放多个值的变量# 单列容器(系统中的单列容器很多):list | tuple# 双列容器(map):只有dict,存放数据 成对出现,dict存放数据采用 key-value键值对 ...
- goaccess iis w3c 自定义log 格式参考
goaccess 支持强大的自定义log 格式,比如我们需要分析iis w3c 格式日志 参考iis w3c 字段 date time s-ip cs-method cs-uri-stem cs-ur ...
- 使用新标签兼容低版本IE
HTML语义化 意义:根据内容的结构化(语义化),选择合适的标签,便于开发者阅读和写出更优雅的代码,同时让流浪器的爬虫和机器更好的解析. 尽可能少的使用无语义的标签 div 和 span 在语义不明显 ...
- BCC校验小知识
BCC校验其实是奇偶校验的一种,但也是经常使用并且效率较高的一种.所谓BCC校验法,就是在发送前和发送后分别把BCC以前包括ETX字符的所有字符按位异或后,按要求变换(增加或去除一个固定的值)后所得到 ...
- JAVA常用工具类异常处理
1异常的定义 异常就是与我们编译相违背在过程中出现的逻辑或忘记一些赋值等等 分为编译时错误和运行时错误 运行时异常 我们一般处理的时Exception异常: 异常处理 异常处理可以通过关键字try,c ...