题意
求出 n n n的排列中是单峰的个数。
思路
设
f
[
i
]
f[i]
f[i]为
i
i
i的排列中单峰的个数。
因为
i
i
i的排列中
i
i
i是峰顶,所以我们把
i
i
i插在
i
−
1
i-1
i−1的左边或右边,这个排列也是单峰的。
那么
f
[
i
]
=
f
[
i
−
1
]
∗
2
f[i]=f[i-1]*2
f[i]=f[i−1]∗2,之后就能发现答案是
2
n
−
1
2^{n-1}
2n−1了
代码
#include<cstdio>
const int p = 1e9 + 7;
long long n;
long long power(long long a, long long b) {
long long res = 1;
for (; b; b >>= 1) {
if (b & 1) res = res * a % p;
a = (long long)a * a % p;
}
return res % p;
}
int main() {
scanf("%lld", &n);
printf("%d", power(2, n - 1));
}