题目大意
给出一个数列AAA是单峰的,并且仅存在一个位置kkk使得Ai<Ai+1(i<k)(i<k)(i<k)且Ai>Ai+1(i>=k)(i>=k)(i>=k)
求出对于111到nnn的所有排列,有多少个是单峰数列
题目解析
可以发现,峰顶一定是nnn,因此考虑 1∼n−11∼n−11∼n−1分别放在 nnn 的左边还是右边,一一得出相应的唯一方案。所以答案就是 222n−1
由于nnn很大,所以用快速幂即可
代码
#include<bits/stdc++.h>
#define L long long
using namespace std;
const int M=1e9+7;
L n;
L qpow(L x,L y)
{
L pro=1;
while(y)
{
if(y&1) (pro*=x)%=M;
(x*=x)%=M;
y>>=1;
}
return pro;
}
int main()
{
cin>>n;
cout<<qpow(2,n-1);
}