【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);
}

谢谢阅读

posted @ 2021-08-18 21:59  基德不基  阅读(25)  评论(0)    收藏  举报