【快速冪+遞推】單峯排列

【題目描述】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  }    
相關文章
相關標籤/搜索