2019-05-07 12:33:45 C++

C++

Copy Copied! Full
#include <bits/stdc++.h> using namespace std; long long mod = 1e9+7; //aのb乗をpで割った値を計算する関数calc long long calc(long long a,long long b,long long p){ p = mod; if(b==0)return 1; if(b%2==0){ long long d = calc(a,b/2,p); return (d*d)%p; }else{ return (a*calc(a,b-1,p))%p; } } int main(void){ int H,W; cin >> H >> W; long long ans = 1; //(H+W-2)!をmodで割った余りを計算する for(int i=1;i<=H+W-2;i++){ ans *= i; ans %= mod; } //(H-1)!で割ることはH^mod-2でかけるのと同値らしいが? for(int i=1;i<=H-1;i++){ ans *= calc(i,mod-2,mod); } //(W-1)!をかけたい! for(int i=1;i<=W-1;i++){ ans *= calc(i,mod-2,mod); } cout << ans; }
RECOMMEND