HDU 5698-瞬間移動
阿新 • • 發佈:2019-02-01
第一點。試著推一下會發現他是楊輝三角,
0 0 0 0 0
0 1 1 1 1
0 1 2 3 4
0 1 3 6 10
0 1 4 10 20(二項式係數)找規律。
或者首先我們分析一下這個題其實就是我們要從(1,1)點走到(n, m)點,而且只能走右下方,那麼我們就相當於從(n-2+m-2)個格子裡選n-2(或者是m-2,都一樣)個格子,因為我們得去掉n-1行和m-1列(這個不能選),然後再去掉第一行和第一列.
#include <iostream> using namespace std; typedef long long LL; const LL MOD = 1000000007; void exgcd(LL a, LL b, LL &x, LL &y) { if(b == 0) { x = 1; y = 0; return; } LL x1, y1; exgcd(b, a%b, x1, y1); x = y1; y = x1-(a/b)*y1; } int main() { LL n, m; while(cin>>n>>m) { LL ans = 1; for(LL i=1; i<=n+m-4; i++) ans = (ans*i)%MOD; for(LL i=1; i<=n-2; i++) { LL x, y; exgcd(i, MOD, x, y); x = (x%MOD+MOD)%MOD; ans = (ans*x)%MOD; } for(LL i=1; i<=m-2; i++) { LL x, y; exgcd(i, MOD, x, y); x = (x%MOD+MOD)%MOD; ans = (ans*x)%MOD; } ans = (ans%MOD+MOD)%MOD; cout<<ans<<endl; } return 0; }