1627 瞬間移動
基準時間限制:1 秒 空間限制:131072 kb 分值: 80 難度:5級演算法題 收藏 關注
有乙個無限大的矩形,初始時你在左上角(即第一行第一列),每次你都可以選擇乙個右下方格仔,並瞬移過去(如從下圖中的紅色格仔能直接瞬移到藍色格仔),求到第n行第m列的格仔有幾種方案,答案對1000000007取模。
input
單組測試資料。
兩個整數n,m(2
<=n,m<=100000)
output
乙個整數表示答案。
input示例45
output示例
試著推一下會發現他是楊輝三角,
那麼就可以做了。
這裡只需要求c(m-2,n-2+m-2)即可。
這裡用到了lucas定理:
a、b是非負整數,p是質數。ab寫成p進製:a=a[n]a[n-1]...a[0],b=b[n]b[n-1]...b[0]。
則組合數c(a,b)與c(a[n],b[n])*c(a[n-1],b[n-1])*...*c(a[0],b[0]) mod p同餘
即:lucas(n,m,p)=c(n%p,m%p)*lucas(n/p,m/p,p)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 1000000007
#define fir first
#define sec second
#define fin freopen("/home/ostreambaba/文件/input.txt", "r", stdin)
#define fout freopen("/home/ostreambaba/文件/output.txt", "w", stdout)
#define mes(x, m) memset(x, m, sizeof(x))
#define pii pair
#define pll pair
#define inf 1e9+7
#define inf 0x3f3f3f3f
#define pi 4.0*atan(1.0)
#define lowbit(x) (x&(-x))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef
long
long ll;
typedef
unsigned
long
long ull;
const
double eps = 1e-9;
const
int mod = 1000000000+7;
const
int maxn = 1000;
using
namespace
std;
inline
int read()
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}int p = 1000000007;
ll fastmod(ll n,ll m)
n=(n*n)%mod;
m>>=1;
}return res;
}ll c(ll n,ll m)
ll ans=1;
for(int i=1;i<=m;++i)
return ans;
}ll lucas(ll n,ll m)
return c(n%mod,m%mod)*lucas(n/mod,m/mod)%mod; //lucas定理
}int main()
51nod 1627 瞬間移動 組合數
有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第n行第m列的格仔有幾種方案,答案對1000000007取模。單組測試資料。兩個整數n,m 2 n,m 100000 output 乙個整數表示答案。inp...
51nod1639 組合數學)
題意 中文題誒 思路 組合數學 n根鞋帶要組成乙個環,那麼顯然與連成一根鞋帶之前不成環是衝要條件 假設當前還剩下 i i 1 根鞋帶,要從中選擇兩根鞋帶頭連線後不成環的概率為 pi 不成環的選擇方法數 所有選擇方法數 所有方法數 c 2 i,2 2 i 2 i 1 2 i 2 i 1 成環的方法數 ...
百度之星 瞬間移動 組合數學逆元
有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第nn行第mm列的格仔有幾種方案,答案對1000000007取模。去掉起點和終點 i 從 1到min n 2,m 2 ans c n 2,i c m 2,i...