【SSL】20210812-A
【SSL】20210812-A
题目描述
若数列A存在位置k,满足
①i<k,ai<ai+1
②i>=k,ai>ai+1
则称该数列为单峰数列
给出正整数n,求全排列n中存在多少个单峰数列
输入格式
给出1个正整数n
输出格式
单峰数列个数(对10^9+7取模)
输入样例
3
输出样例
4
解题思路
首先用一个队列暴力一遍。
但是,我们会发现,这些答案有一个规律:
$ans=2^{n+1}$
然后使用快速幂
Code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
using namespace std;
ll m=1000000007;
ll quick_jia(ll a,ll b)//快速乘
{
ll answer=0;
while(b>0)
{
if(b&1)
{
answer=(answer%m+a%m)%m;
}
a=(a%m+a%m)%m;
b>>=1;
}
return answer%m;
}
ll quick_pow(ll a,ll b) //快速幂
{
ll answer=1;
while(b>0)
{
if(b&1)
{
answer=quick_jia(answer%m,a%m)%m;//群mod乱舞
}
a=quick_jia(a%m,a%m)%m;
b>>=1;
}
return answer%m;
}
int main()
{
ll n;
cin>>n;
cout<<quick_pow(2,n-1);
}
谢谢阅读
本文来自博客园,作者:基德不基,转载请注明原文链接:https://www.cnblogs.com/ssllyw/p/15159056.html

浙公网安备 33010602011771号