【題目描述】ios
一 個 n 的 全 排 列 A[i] 是 單 峯 的 , 當 且 僅 當 存 在 某 個 x 使 得
A[1]<A[2]<...<A[x]>A[x+1]>...> A[n]。
例如,對於 9 的全排列,125798643 是一個單峯排列,123456789 也是一個單峯排列,
但 356298741 就不是。
試求 n 的單峯全排列的個數。
【輸入數據】
輸入一個數 n。
【輸出數據】
輸出 n 的全排列中單峯排列的個數。
因爲這個數可能很大,所以你只須要輸出它 mod 1234567 的值。
【輸入樣例】spa
3
【輸出樣例】code
4
【樣例說明】
共有如下 4 種方案:個數
123
132
231
321blog
【解題思路】ci
根據數據,不可貴出,n的全排列中單峯排列的個數爲2n-1個,因此用快速冪就能夠解決io
代碼以下class
1 #include <iostream> 2 using namespace std; 3 int N=1234567; 4 long long qpow (long long a,long long b) 5 { 6 long long base=a,ans=1; 7 while (b!=0) 8 { 9 if (b&1!=0) 10 { 11 ans*=base; 12 ans%=N; 13 } 14 base*=base; 15 base%=N; 16 b>>=1; 17 } 18 return ans%N; 19 } 20 int main() 21 { 22 long long n; 23 cin>>n; 24 n-=1; 25 cout<<qpow(2,n); 26 }