跳[Codevs1515]

原创 2016年06月01日 17:01:44

题目描述 Description

邪教喜欢在各种各样空间内跳。

现在,邪教来到了一个二维平面。在这个平面内,如果邪教当前跳到了 (x,y) ,那么他下一步可以选择跳到以下 4 个点: (x1,y),(x+1,y),(x,y1),(x,y+1)

而每当邪教到达一个点,他需要耗费一些体力,假设到达 (x,y) 需要耗费的体力用 C(x,y) 表示。

对于 C(x,y) ,有以下几个性质:

1、若 x=0 或者 y=0 ,则 C(x,y)=1

2、若 x>0y>0 ,则 C(x,y)=C(x,y1)+C(x1,y)

3、若 x<0y<0 ,则 C(x,y)=+

现在,邪教想知道从 (0,0) 出发到 (N,M) ,最少花费多少体力(到达 (0,0) 点花费的体力也需要被算入)。

由于答案可能很大,只需要输出答案对 109+7 取模的结果。


输入描述 Input Description

读入两个整数 NM ,表示邪教想到达的点。


输出描述 Output Description

输出仅一个整数,表示邪教需要花费的最小体力对 109+7 取模的结果。


样例输入 Sample Input

1 2


样例输出 Sample Output

6


数据范围及提示 Data Size & Hint

对于 10% 的数据,满足 N,M<=20

对于 30% 的数据,满足 N,M<=100

对于 60% 的数据,满足 min(N,M)<=100

对于 100% 的数据,满足 0<=N,M<=1012NM<=1012


分析

这里写图片描述

上图是 C(x,y)0<xy<12 的部分,从这里我们惊喜地看出 C(x,y)=Cyx+y

题目要求的最小值显然是走直线(如图中阴影部分的最短路径为 1111410 ),证明略。如果令 N>=M ,则走过的点为 (0,0)(1,0)(2,0)...(n,0)(n,1)(n,2)...(n,m) ,则花费为 n1i=0C0i+ni=0Cin = n+Cmn+m+1.
d=109+7 ,故 ans=(n+Cdn+m+1)%m=n%d+mi=1(n+m+2i)mi=1i%d,设 a=mi=1(n+m+2i)b=mi=1ib0b1mod d ,则 ans=n%d+ab%d=n%d+ab0bb0%d=n%d+ab0%d
至于求 b0,因为 bb01(mod d)=kd+1,最后用拓展欧几里得求出 b0 即可


代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long LL;

const LL Mod = 1000000007;

LL n,m;

LL gcd(LL,LL,LL &,LL &);

int main(){

    scanf("%lld%lld",&n,&m);

    if(n<m)
        swap(n,m);

    LL tmp1=1,tmp2=1;
    for(LL i=1;i<=m;++i)
        tmp1 = tmp1*((n+m+2-i)%Mod)%Mod;
    for(LL i=1;i<=m;++i)
        tmp2 = tmp2*i%Mod;


    LL x,y,res;
    res = gcd(tmp2,Mod,x,y);

    printf("%lld",(Mod+n+tmp1*x%Mod)%Mod);

    return 0;
}

LL gcd(LL a,LL b,LL &x,LL &y){

    if(b == 0){
        x = 1;
        y = 0;
        return a;
    }

    LL ans = gcd(b,a%b,x,y);

    LL tmp = x;
    x = y%Mod;
    y = (Mod+tmp-a/b*y)%Mod;

    return ans;

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

CodeVS1515跳

组合数学
  • FSAHFGSADHSAKNDAS
  • FSAHFGSADHSAKNDAS
  • 2017年02月28日 17:32
  • 270

Codevs1515 跳

邪教喜欢在各种各样空间内跳。现在,邪教来到了一个二维平面。在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点:(x-1,y), (x+1,y), (x,y-1), (x,y...
  • Chorolop
  • Chorolop
  • 2017年06月10日 18:29
  • 110

codevs1515 瞎搞+Lucas

题目分析首先我们打出一张地图: 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 ...
  • litble
  • litble
  • 2017年08月06日 19:56
  • 102

跳~跳~跳~lca

跳~跳~跳~lca
  • CSDN_Liu_Yiming
  • CSDN_Liu_Yiming
  • 2016年11月16日 22:12
  • 90

跳~跳~跳

年年初跳槽最多,跳槽是一门学问,也是一种策略。跳槽并不意味着你就能够取得职业的成功,当面临跳槽时,如何顺利地完成跳槽,从而取得职业的成功呢?以下是一些切身体会,值得大家参考。     不错,大家逐渐逐...
  • windking21
  • windking21
  • 2007年04月04日 22:11
  • 662

跳一跳辅助程序核心算法分析(PHP版)

最近微信更新后,一款小程序游戏跳一跳可谓是火的一塌糊涂,我刚回过神时开始勤奋的练技术时,有程序员朋友发来外挂程序玩跳一跳的视频,我一看他的分数已经上了8000多,简直是逆天啊。身为程序员的我深知,技术...
  • huang_yong_
  • huang_yong_
  • 2018年01月04日 18:00
  • 2573

跳板机的作用

转自:http://blog.sina.com.cn/s/blog_3f42806c0100xc1p.html 跳板机的作用:如果控制机与受害机直接相连,设想,如果这时受害机已经查出是是...
  • a1259109679
  • a1259109679
  • 2015年05月14日 12:31
  • 1069

利用Opencv实现微信跳一跳脚本源码放送(C++实现嵌套python)

最近微信的跳一跳很火,无意间在QQ空间看见有人用单片机控制舵机测量距离实现微信跳一跳,于是我雅兴大发,自己也用Opencv实现一个视觉控制的微信跳一跳,百度一下,果然很多,但大多数都是python实现...
  • qq_37406130
  • qq_37406130
  • 2018年01月08日 21:17
  • 1255

跳频技术——学习总结(一)

跳频技术——学习总结(一) 开始跳频的学习快一个月了吧,最近才停下其它事情,集中时间看了一些内容。资料有《跳频通信干扰与抗干扰技术》(那丹彤)、《跳频通信》(梅文华)和网上百度的各种资料。 一、扩...
  • shun421
  • shun421
  • 2016年12月28日 21:18
  • 2255

ssh 配置跳板机

跳板机 ssh proxycommand@(ssh)例子 本地机器 A, ip 192.168.32.160 跳板机 B,ip 192.168.32.163 实际服务器 C,ip 192.168.32...
  • CityzenOldwang
  • CityzenOldwang
  • 2017年08月11日 15:01
  • 1456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跳[Codevs1515]
举报原因:
原因补充:

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