【HDU 5698】瞬間移動(組合數,逆元)
x和y分開考慮,在(1,1)到(n,m)之間可以選擇走i步。就需要選i步對應的行C(n-2,i)及i步對應的列C(m-2,i)。相乘起來。 假設$m\leq n$
$$\sum_{i=1}^{m-2} C_{n-2}^i\cdot C_{m-2}^i=\sum_{i=1}^{m-2} C_{n-2}^i\cdot C_{m-2}^{m-2-i}=C_{n+m-4}^{m-2}$$
然後標程裡求i的階乘的逆是預處理的,主要這句:
$$f[i]=(M-M/i)\cdot f[M\%i]\%M$$
這裡f即i的逆元,為什麼可以這麼求呢?
首先這裡的M必須是質數。
$$M=k\cdot i+r \equiv 0 \pmod M$$
兩邊乘上$i^{-1}\cdot r^{-1}$(如果M不是質數,r就可能為0)
$$\begin{eqnarray} k\cdot r^{-1}+i^{-1} &\equiv& 0 &\pmod M\\
i^{-1} &\equiv& -k\cdot r^{-1} &\pmod M\\
i^{-1} &\equiv& M-\left\lfloor\frac{M}{i}\right\rfloor\cdot \left(M\bmod i\right)^{-1} &\pmod M \end{eqnarray}$$
程式碼
#include<cstdio> #define M 1000000007 #define N 200001 #define ll long long ll fac[N]={1,1},inv[N]={1,1},f[N]={1,1}; int n,m; ll C(ll a,ll b){ return fac[a]*inv[b]%M*inv[a-b]%M; } int main(){ for(int i=2;i<N;i++){ fac[i]=fac[i-1]*i%M; f[i]=(M-M/i)*f[M%i]%M; inv[i]=inv[i-1]*f[i]%M; } while(~scanf("%d%d",&n,&m)) printf("%lld\n",C(m+n-4,m-2)); }
相關推薦
【HDU 5698】瞬間移動(組合數,逆元)
x和y分開考慮,在(1,1)到(n,m)之間可以選擇走i步。就需要選i步對應的行C(n-2,i)及i步對應的列C(m-2,i)。相乘起來。 假設$m\leq n$$$\sum_{i=1}^{m-2} C_{n-2}^i\cdot C_{m-2}^i=\sum_{i=1}^{m-2} C_{n-2}^i\cd
【HDU 3037】Saving Beans(組合數取模)
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3706 Acc
百度之星 初賽2 瞬間轉移 HDU 5698 (組合數+逆元)
大意:有一個無限大的矩形,初始時你在左上角(即第一行第一列),每次你都可以選擇一個右下方格子,並瞬移過去(如從下圖中的紅色格子能直接瞬移到藍色格子),求到第n行第m列的格子有幾種方案,答案對10000
hdu5698 瞬間移動(組合數取摸)(16百度之星round2B)
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 有一個無限大的矩形,初始時你在左上角(即第一行
“東信杯”廣西大學第一屆程式設計競賽(同步賽)B 不吉利的數(組合數+逆元)
https://ac.nowcoder.com/acm/contest/283/B 簡單組合數學: 選出一共有多少個重複的 ,不同的 #include<bits/stdc++.h> using namespace std; typedef long l
HDU 5698:瞬間移動(排列組合)
AC程式碼: #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; typedef long long LL;
【HDU - 1045】Fire Net (dfs 或二分圖)
題幹: Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a str
【HDU 1114】Piggy-Bank(dp||完全揹包問題)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 26458 Accepted
HDU 6044--Limited Permutation(搜索+組合數+逆元)
name review cst pri getchar value ane ips begin 題目鏈接 Problem Description As to a permutation p1,p2,?,pn from 1 to n, it is uncomplic
【HDU 2602】Bone Collector(裸的01背包)
c++ style memset its for get strong IE HA Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone C
【HDU - 1251 】統計難題(字典樹,求擁有公共字首的字串數量)
題幹: Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老
【HDU - 2072 】單詞數(字串讀入技巧,sstream大法,水題,字串讀入格式)
題幹: lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裡不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。 Input 有多組資料,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,遇到#時表示
【HDU - 2546】飯卡 (dp,0-1揹包,貪心思想)
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買一個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望儘量使卡上的餘額最少。 某天,食堂中有n種菜出售,每種菜可購買一次。已知每種菜
【HDU - 2398 】Savings Account (水題模擬)
題幹: Suppose you open a savings account with a certain initial balance. You will not make any withdrawals or further deposits for a number of years
【HDU - 4185】Oil Skimming (二分圖,建圖,匈牙利演算法)
題幹: Thanks to a certain "green" resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floatin
【HDU - 2376】Average distance (樹上任意兩點之間的距離之和的平均值、計算結點的貢獻度)
Given a tree, calculate the average distance between two vertices in the tree. For example, the average distance between two vertices in the followi
【AtCoder1983】BBQ Hard (組合數+巧妙模型轉化)
半題解 輸入A[i],B[i],求∑i=1N∑j=i+1NCAi+Aj+Bi+BjAi+Bi\sum_{i=1}^N\sum_{j=i+1}^N C_{A_i+A_j+B_i+B_j}^{A_i+B_i
【HDU 5956】The Elder(樹上斜率DP)
思路: 樹形DP,dp[i]=min(dp[j]+(sum[i]-sum[j])^2+p) (j是i的祖先即j<i) ,用斜率將複雜度由O(n^2)優化為O(n)。 此外,在pop的時候可以二分,會更優一些。 但是感覺寫起來有點麻煩,這個題不二分的話,時間
【HDU 2896】病毒侵襲(AC自動機-用陣列完成)
Problem Description: 當太陽的光輝逐漸被月亮遮蔽,世界失去了光明,大地迎來最黑暗的時刻。。。。在這樣的時刻,人們卻異常興奮——我們能在有生之年看到500年一遇的世界奇觀,那是多麼幸福的事兒啊~~ 但網路上總有那麼些網站,開始藉著民眾的好奇心,打著介
【HDU 5382】 GCD?LCM! (數論、積性函式)
GCD?LCM! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 316 Accepted Submission(s): 200 O