Y 機械人走方格 V3

2021-10-08 10:17:16 字數 1256 閱讀 5624

n * n的方格,從左上到右下畫一條線。乙個機械人從左上走到右下,只能向右或向下走。並要求只能在這條線的上面或下面走,不能穿越這條線,有多少種不同的走法?由於方法數量可能很大,只需要輸出mod 10007的結果。

input

輸入乙個數n(2 <= n <= 10^9)。

output

輸出走法的數量 mod 10007。

sample input

4sample output

10卡特蘭數+盧卡斯+費馬小定理:

分析:列舉幾個n就會發現,結果就是卡特蘭數乘2

卡特蘭數:

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, …

這裡用到求卡特蘭數的乙個公式:h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

然後其實這就是乙個比較裸的卡特蘭+盧卡斯模板。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 205

#define inf 0x3f3f3f3f

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e6+5;

int p=

1e4+7;

//快速冪

ll quick_pow

(ll n,ll m)

return ans;

}//求組合數c(n,m)

ll c

(ll n,ll m)

return ans;

}//盧卡斯模板

ll lucas

(ll n,ll m)

intmain()

51nod 1120 機械人走方格V3

1120 機械人走方格 v3 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 n n的方格,從左上到右下畫一條線。乙個機械人從左上走到右下,只能向右或向下走。並要求只能在這條線的上面或下面走,不能穿越這條線,有多少種不同的走法?由於方法數量可能很大,只需要輸出mo...

51nod1120 機械人走方格 V3

跟括號序列是一樣的,將向右走看成是左括號向左走看成是右括號就可以了。那麼就是卡特蘭數了。然後由於n和m太大所以用了lucas定理 跟括號序列是一樣的,將向右走看成是左括號向左走看成是右括號就可以了。那麼就是卡特蘭數了。include include include includeusing name...

51Nod1120 機械人走方格 V3

題目看這裡 乙個數學題,答案就是卡特蘭數 2 求卡特蘭數要用到組合數求法f n c 2n 2,n 1 n 由於模數較小,可以lucas定理直接做,但是這樣是有問題的因為n不一定和模數互質,但是還是a了,資料比較水 pragma gcc opitmize o3 pragma g opitmize o3...