HDU-5698-瞬间移动

原创 2016年06月01日 18:15:17

Problem Description

有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。

Input
多组测试数据。
两个整数n,m(2≤n,m≤100000)

Output
一个整数表示答案

Sample Input
4 5

Sample Output
10

Source
2016”百度之星” - 初赛(Astar Round2B)

Recommend
wange2014

题解

先打印一部分结果,可以发现,斜着看就是杨辉三角的一部分,杨辉三角的规律 :第n行第m个数就是 (a+b)的n次方的第m个多项式的系数。
这里用到卢卡斯定理,套个模板就好。

代码(C)

#include <stdio.h>
#include <string.h>
#define MOD 1000000007
typedef long long LL;

LL quickPower(LL a, LL b)
{
    LL ans = 1;
    a %= MOD;
    while (b)
    {
        if (b & 1)
        {
            ans = ans * a %MOD;
        }
        b >>= 1;
        a = a * a % MOD;
    }
    return ans;
}

LL c(LL n, LL m)
{
    if (m > n)
    {
        return 0;
    }
    LL ans = 1;
    for (int i = 1; i <= m; i++)
    {
        LL a = (n + i - m) % MOD;
        LL b = i % MOD;
        ans = ans * (a * quickPower(b, MOD - 2) % MOD) % MOD;
    }
    return ans;
}

LL lucas(LL n, LL m)
{
    if (m == 0)
    {
        return 1;
    }
    return c(n % MOD, m % MOD) * lucas(n / MOD, m / MOD) % MOD;
}

int main(int argc, const char * argv[])
{
    LL n, m;
    while (~scanf("%lld %lld", &n, &m))
    {
        LL max, min;
        max = n + m - 3;
        min = m - 1;
        printf("%lld\n", lucas(max - 1, min - 1));
    }
    return 0;
}
版权声明:听说这里让写版权声明~~~ 举报

相关文章推荐

HDU-5698-瞬间移动

Problem Description有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的...
  • f_zyj
  • f_zyj
  • 2016-06-01 18:15
  • 301

HDU 5698 瞬间移动

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5698 瞬间移动 Time Limit: 4000/2000 MS (Java/Ot...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

HDU-5698-瞬间移动(杨辉三角)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5698 Problem Description 有一个无限大的矩形,初始时你在左上角(即第一行...

2016暑期集训13 B瞬间移动 HDU 5698

瞬间移动 时间限制: 1 Sec 内存限制: 128 MB 提交: 10 解决: 8 [提交][状态][讨论版] 题目描述 有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你...
  • ACZRZ
  • ACZRZ
  • 2016-08-21 17:29
  • 139

hdu 5698 瞬间移动 -- (大组合数取模)

瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub...

HDU 5698 瞬间移动 [数论] [逆元] [组合数取模]

瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub...

HDU 5698 瞬间移动(费马、逆元)

费马小定理

HDU 5698 瞬间移动 (2016"百度之星" - 初赛(Astar Round2B) 1003)

传送门 瞬间移动Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...

百度之星 初赛2 瞬间转移 HDU 5698 (组合数+逆元)

大意:有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对10000...

cocos2d_android 瞬间动作

该文章所写的瞬间动作主要有
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)