长沙理工大学--论演员的自我修养---杨辉三角+卢卡斯定理
长沙理工大学第十四届程序设计竞赛----K
http://csustacm.com:4803/contest/32/problem/K
论演员的自我修养
Sample Input 1
10 10 4 5
Sample Output 1
10
解题思路:
这个题,我们手算一下,算出前几个情况,找下规律
手算几项 画个表格 如下
很容易能找出规律
规律就是:到达点(X,Y)的步数a[X][Y]等于 x<X ,y<Y的所有点之和再+1,如图,红色的等于所有橙色加起来+1。
有了这个规律我们就能算出到(x,y)所需步数了
但是 复杂度有点高,再一看数据范围,1e5,肯定不行。
怎么呢?我们多写几个观察一下这些数据
1 1 1 1 1 ......
1 2 3 4 5......
1 3 6 10 15.....
1 4 10 20 35.....
如果你对数学很敏感的话,到这里就能看出来这些数字很特殊
这些数字就是杨辉三角(下图是杨辉三角,斜着看)
我们可以把我们表中的每一个数对应到杨辉三角中
根据对应关系,我们不难发现,表中坐标(x,y)的值就对应杨辉三角中坐标(x+y-3,x-1)。
最重要的是,杨辉三角是有公式的
杨辉三角中,第n行的m个数值为 C(n-1,m-1)
所以,这个题的答案就出来了,走到(x,y)所需步数就是C( x+y-4 , x-2 ) (x,y>2)
然后就是求组合数的问题了,一发卢卡斯模板就好了
(关于卢卡斯定理,点击跳转)
其实这个题范围不大,不用卢卡斯也行,扩展欧几里得或者费马小定理求个逆元就过了
AC代码
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int mod = 1e9 + 7;
ll mm[100007];
ll exgcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return a;}ll r=exgcd(b,a%b,x,y);ll t=y;y=x-(a/b)*y;x=t;return r;
}
ll c(ll n,ll m){if(n<m)return 0;ll fz=1,fm=1;for(ll i=n;i>=1;i--){fz*=i;fz%=mod;}for(ll i=m;i>=1;i--){fm*=i;fm%=mod;}for(ll i=n-m;i>=1;i--){fm*=i;fm%=mod;}ll x,y,ans;exgcd(fm,mod,x,y);x=(x+mod)%mod;ans=x*fz%mod;return ans;
}
ll Lucas(ll n, ll m){return m ? Lucas(n/mod, m/mod) * c(n%mod, m%mod) % mod : 1;
}
int main(){ll x,y,n,m;scanf("%lld%lld%lld%lld",&n,&m,&x,&y);if(x==1||y==1)printf("0\n");else if(x==2||y==2)printf("1\n");else printf("%lld\n",Lucas(x+y-4,x-2));
}
长沙理工大学--论演员的自我修养---杨辉三角+卢卡斯定理相关推荐
- python每行输出5个数_python打印杨辉三角及输出第m行第k个数
1.打印杨辉三角及输出第m行第k个数 1.计算到m行,打印出k项 第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]] m=int( ...
- js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角...
js算法集合(二) 斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理 ...
- 用python实现杨辉三角的几种不同方式
杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...
- LeetCode简单题之杨辉三角 II
题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...
- LeetCode简单题之杨辉三角
题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1], ...
- 最详细的----->一维数组实现杨辉三角
代码循环部分的解析在代码之后 先来看代码 #include<stdio.h> int arr[20]; int main() {arr[0] = 1;int n;scanf_s(" ...
- java利用递归画杨辉三角_用java程序编写杨辉三角形,初学者适用
原创代码(非网上照搬复制,个人原创,真实有效): import java.util.Scanner; class demo1 { public static void main(String[] ar ...
- 【每日一算法】杨辉三角 II
每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...
- 【每日一算法】杨辉三角到底是什么?
每日一算法-杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出:[ [1], ...
- 菲波那切数列php实现,php实现菲波那切数列和杨辉三角
1.递归 显示斐波那契数列 function recursion($num){ //判断是否小于0 if($num<0){ return -1; } if($num==1){ return 0 ...
最新文章
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...
- PCI BAR设置过程
- tensorflow tf.is_gpu_available() (判断GPU是否可用)
- 【开启报名】云原生变革与效能技术沙龙 · 厦门站
- [图神经网络] 图节点Node表示---GCN
- element-ui表单验证:用户名、密码、电话、邮箱
- 拥抱.NET Core系列:MemoryCache 初识
- 开源 计划管理_公司开源计划的三大好处
- nuttx linux 编译,linux下建立nuttx开发环境
- Android官方api的下载
- 二维数组最大值首尾相连
- Connection reset问题,INFO: I/O exception (java.net.SocketException) caught when processing reques
- Python安装numpy模块及pycharm配置
- GIS中的基本概念收集
- Java 泛型的实例化总结
- 计算机水平拼音怎么写,电脑上的拼音到底是怎么敲出来的
- Spring Boot项目CSRF (跨站请求伪造)攻击演示与防御
- Supervisor进程管理详解
- win7忘记密码解决,Administrator账号密码忘记 解决办法
- PPT画图软件,强烈推荐!提升能力的利器。