跳[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;

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

相关文章推荐

[codevs 1515]跳 【解题报告】

题目描述 Description 邪教喜欢在各种各样空间内跳。 现在,邪教来到了一个二维平面。在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点:(x-1,y), ...

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
  • 65

codevs 4768 跳石头(二分答案)

题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终...

VS2005 CodeVS2005 Code

  • 2011年10月26日 08:46
  • 242KB
  • 下载

最大流,最小割(水塘,uva 1515)

最大流是由最小割决定的,一个木桶能装多少水是由最短的那块木板决定的,一条路单位时间最多能通过多少辆车是由最窄的那个路口决定的。 http://blog.csdn.net/jijijix/articl...

FZU-1515 Balloons in a Box

cin,cout真是两个复杂的东西呀!!

poj1515Street Directions【无向图->有向图 链式前向星版tarjan求桥】

纠结半天怎么用原来的模板表示边与序号的关系,map都用上了,还是一塌糊涂,然而,这是图啊……怎么能把链式前向星忘了→_→ 具体看注释 ,思路当然和那些都一样 /*********** poj151...

URAL 1515. Cashmaster (数学啊 )

URAL 1515. Cashmaster (数学啊 )

【51Nod 1515】明辨是非

Description给n组操作,每组操作形式为x y p。当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等;否则输出NO,并忽略此次操作。当p为0时,如果第x变量和第y个变...

UVa 1515 Pool construction

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跳[Codevs1515]
举报原因:
原因补充:

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