1. 程式人生 > >【HDU 5698】瞬間移動(組合數,逆元)

【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 3037Saving 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 - 1045Fire 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 1114Piggy-Bankdp||完全揹包問題

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 2602Bone 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 - 4185Oil 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 - 2376Average 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

AtCoder1983BBQ 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 5956The 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