长沙理工大学第十四届程序设计竞赛----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));
}

长沙理工大学--论演员的自我修养---杨辉三角+卢卡斯定理相关推荐

  1. python每行输出5个数_python打印杨辉三角及输出第m行第k个数

    1.打印杨辉三角及输出第m行第k个数 1.计算到m行,打印出k项 第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]] m=int( ...

  2. js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角...

    js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理 ...

  3. 用python实现杨辉三角的几种不同方式

    杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...

  4. LeetCode简单题之杨辉三角 II

    题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...

  5. LeetCode简单题之杨辉三角

    题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1], ...

  6. 最详细的----->一维数组实现杨辉三角

    代码循环部分的解析在代码之后 先来看代码 #include<stdio.h> int arr[20]; int main() {arr[0] = 1;int n;scanf_s(" ...

  7. java利用递归画杨辉三角_用java程序编写杨辉三角形,初学者适用

    原创代码(非网上照搬复制,个人原创,真实有效): import java.util.Scanner; class demo1 { public static void main(String[] ar ...

  8. 【每日一算法】杨辉三角 II

    每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...

  9. 【每日一算法】杨辉三角到底是什么?

    每日一算法-杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出:[     [1], ...

  10. 菲波那切数列php实现,php实现菲波那切数列和杨辉三角

    1.递归  显示斐波那契数列 function recursion($num){ //判断是否小于0 if($num<0){ return -1; } if($num==1){ return 0 ...

最新文章

  1. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...
  2. PCI BAR设置过程
  3. tensorflow tf.is_gpu_available() (判断GPU是否可用)
  4. 【开启报名】云原生变革与效能技术沙龙 · 厦门站
  5. [图神经网络] 图节点Node表示---GCN
  6. element-ui表单验证:用户名、密码、电话、邮箱
  7. 拥抱.NET Core系列:MemoryCache 初识
  8. 开源 计划管理_公司开源计划的三大好处
  9. nuttx linux 编译,linux下建立nuttx开发环境
  10. Android官方api的下载
  11. 二维数组最大值首尾相连
  12. Connection reset问题,INFO: I/O exception (java.net.SocketException) caught when processing reques
  13. Python安装numpy模块及pycharm配置
  14. GIS中的基本概念收集
  15. Java 泛型的实例化总结
  16. 计算机水平拼音怎么写,电脑上的拼音到底是怎么敲出来的
  17. Spring Boot项目CSRF (跨站请求伪造)攻击演示与防御
  18. Supervisor进程管理详解
  19. win7忘记密码解决,Administrator账号密码忘记 解决办法
  20. PPT画图软件,强烈推荐!提升能力的利器。

热门文章

  1. mybatis # $区别
  2. D3DXIntersectTri 求三角形与射线相交
  3. 还原 idea undo commit
  4. UML的类图中各箭头的含义
  5. GC root 解决了循环引用的垃圾回收问题
  6. Android中的 targetsdkversioin
  7. datax,同步数据,mysql sqlserver 双向
  8. 防火防盗竟防不了网络攻击 智能摄像机的网络安全怎么办?
  9. Ios精品源码,扁平化的ActionSheet仿花椒截屏demo文件签名重叠卡片滚动汽车仪表盘...
  10. JdbcUtils针对事务问题作出的第三次修改