zoukankan      html  css  js  c++  java
  • 问题 H: Hopscotch

    问题 H: Hopscotch

    时间限制: 5 Sec  内存限制: 128 MB
    提交: 42  解决: 18
    [提交][状态][讨论版][命题人:admin]

    题目描述

    You’re playing hopscotch! You start at the origin and your goal is to hop to the lattice point (N, N). A hop consists of going from lattice point (x1, y1) to (x2, y2), where x1 < x2 and y1 < y2.
    You dislike making small hops though. You’ve decided that for every hop you make between two lattice points, the x-coordinate must increase by at least X and the y-coordinate must increase by at least Y .
    Compute the number of distinct paths you can take between (0, 0) and (N, N) that respect the above constraints. Two paths are distinct if there is some lattice point that you visit in one path which you don’t visit in the other.
    Hint: The output involves arithmetic mod 109+ 7. Note that with p a prime like 109+ 7, and x an integer not equal to 0 mod p, then x(xp−2) mod p equals 1 mod p.

    输入

    The input consists of a line of three integers, N X Y . You may assume 1 ≤ X, Y ≤ N ≤ 106.

    输出

    The number of distinct paths you can take between the two lattice points can be very large. Hence output this number modulo 1 000 000 007 (109+ 7).

    样例输入

    7 2 3
    

    样例输出

    9
    我们枚举多少步到达终点,然后判断在这种情况下,x有多少种方案,y有多少种,即相乘
    打表找规律
    若该数是21 ,x为3或4
    表如下:
      次数 1 2 3 4 5
    3     1 16 91 220 210
    4 1 14 55 56 5

    通过这几项发现为斜的组合数
    组合数表如下:

    1,1,
    1,2,1,
    1,3,3,1,
    1,4,6,4,1,
    1,5,10,10,5,1,
    1,6,15,20,15,6,1,
    1,7,21,35,35,21,7,1,
    1,8,28,56,70,56,28,8,1,
    1,9,36,84,126,126,84,36,9,1,
    1,10,45,120,210,252,210,120,45,10,1,
    1,11,55,165,330,462,462,330,165,55,11,1,
    1,12,66,220,495,792,924,792,495,220,66,12,1,
    1,13,78,286,715,1287,1716,1716,1287,715,286,78,13,1,
    1,14,91,364,1001,2002,3003,3432,3003,2002,1001,364,91,14,1,
    1,15,105,455,1365,3003,5005,6435,6435,5005,3003,1365,455,105,15,1,
    1,16,120,560,1820,4368,8008,11440,12870,11440,8008,4368,1820,560,120,16,1,

    比赛的时候找的规律,然后代码一直运行错误,最后发现可能是自己写的组合数有问题

    c++ code:

    #include<bits/stdc++.h>
     
    using namespace std;
    const int mod= 1e9+7;
    const int MOD= 1e9+7;
    typedef long long ll;
    const int N=2e6+20;
    ll inv(ll b){   return b==1||b==0?1:(mod-mod/b)*inv(mod%b)%mod; }
    ll f[N];
    ll C(ll n,ll m)
    {
        return f[n]*inv(f[m])%mod*inv(f[n-m])%mod;
    }
    void init()
    {
        f[0]=1;
        for(int i=1;i<=N;i++)
            f[i]=f[i-1]*i%mod;
    }
    int main()
    {
     
        init();
        ll n,x,y;
        scanf("%lld%lld%lld",&n,&x,&y);
        ll ans=0,len=n/max(x,y);
        ll xn=(n-2*x+1),yn=(n-2*y+1);
        //cout<<xn<<" "<<yn<<" "<<len<<endl;
        if(len>=1)  ans=1;
        for(int i=2;i<=len;i++)
        {
           // cout<<C(xn-(x-1)*(i-2),i-1)<<" "<<C(yn-(y-1)*(i-2),i-1)<<endl;
            ans=(ans%mod+C(xn-(x-1)*(i-2),i-1)*C(yn-(y-1)*(i-2),i-1)%mod)%mod;
        }
        printf("%lld
    ",ans);
        return 0;
    }


  • 相关阅读:
    Android 系统属性
    免费Gif图片录制工具
    850 USB 烧录模式
    Fusioncharts图表组件API参考方法(Functions)汇总篇(续)
    FusionCharts 分类以及各个属性参数列表
    FusionCharts生成报表应用
    FusionCharts参数大全及详细说明(中文)
    FusionCharts导出图表常见问题(FAQ)汇总---FusionCharts常见问题大全
    FusionCharts生成Flash图表常见问题FAQ
    FusionCharts使用问题及解决方法(五)-FusionCharts常见问题大全
  • 原文地址:https://www.cnblogs.com/lemon-jade/p/8909462.html
Copyright © 2011-2022 走看看