题目描述
求所有长度为n的01串中满足如下条件的二元组个数:
设第i位和第j位分别位ai和aj(i<j),则ai=1,aj=0。
答案对1e9+7取模。
输入描述:
输入一个n。
输出描述:
输出答案对1e9+7取模
示例1
输入
3
输出
6
数据范围
n <= 1e18
思路
首先看到本题的数据范围可以知道,这题不能用暴力和搜索做,我们要考虑一下推导公式,最后得到的公式是ans=n*(n-1)*2^(n-3)。
ACcode
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll ksm(ll x)//快速幂
{
ll ans=1;
ll cnt=2;
while(x>0)
{
if(x&1) {ans=ans*cnt%mod;}
x>>=1;
cnt=(cnt*cnt)%mod;
}
return ans%mod;
}
int main()
{
ll n;cin>>n;
if(n<=1) cout<<0<<endl;
else if(n==2) cout<<1<<endl;
else cout<<((n%mod)*((n-1)%mod)%mod)*(ksm(n-3)%mod)%mod<<endl;
return 0;
}