题目链接:C. Array
题意:
求满足以下要求的序列的个数
解析:
非单调不好做,强制变成单调,做法就是将每个数加上其下标,序列就成为值域在[2,2n]的序列且两两互不相同,这时候答案即为:
。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int Max=200010;
int n,m;
int c[Max][4];
inline int ksm(int a,int b)
{
int ans=1;
while(b)
{
if(b&1) ans=(ans*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return ans;
}
inline int C(int n,int m)
{
int mul=1;
for(int i=1;i<=n;i++)(mul*=i)%=mod;
int tmp=1;
for(int i=1;i<=m;++i)(tmp*=i)%=mod;
(mul*=ksm(tmp,mod-2))%=mod,tmp=1;
for(int i=1;i<=n-m;++i)(tmp*=i)%=mod;
(mul*=ksm(tmp,mod-2))%=mod;
return mul;
}
signed main()
{
cin>>n;
cout<<((1ll*2*C(2*n-1,n)-n)%mod+mod)%mod;
return 0;
}