CF57 C. Array

Problem - 57C - Codeforces

 

题意:

问有多少个长为n的序列满足以下要求:

1、每个数的范围为[1,n]

2、序列非增或者非降

 

对于任何一个值域为n、长度为n的序列,我们都可以通过排序的方式是他变成非增或者非降

所以要求2可以不管

问题就变成了设xi(>=0)表示数字i有多少个,求不定方程x1+x2+x3+……+xn=n 的解的个数

设yi=xi+1(>=1),y1+y2+y3+……+yn=2n

根据插板法有C(2n-1,n-1)组解

因为非增和非降都可以,所以除了n个数都是同一个数的解还要乘2

所以答案是C(2n-1,n-1)*2-n

 

复制代码
#include<bits/stdc++.h>

using namespace std;

#define N 200002

const int mod=1000000007;

long long fac[N],invf[N];

long long poww(long long a,long long b)
{
    long long c=1;
    for(;b;a=a*a%mod,b>>=1)
        if(b&1) c=c*a%mod;
    return c;
}

int main()
{
    int n;
    scanf("%d",&n);
    fac[0]=1;
    for(int i=1;i<=n+n;++i) fac[i]=fac[i-1]*i%mod;
    invf[n+n-1]=poww(fac[n+n-1],mod-2);
    for(int i=n+n-2;i>=0;--i) invf[i]=invf[i+1]*(i+1)%mod;
    long long ans=fac[n+n-1]*invf[n-1]%mod*invf[n]%mod*2%mod;
    ans=(ans-n+mod)%mod;
    printf("%lld",ans);
}

  
 
复制代码

 

posted @   TRTTG  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2020-10-02 UVA10325 The Lottery
2020-10-02 CF979C Kuro and Walking Route
点击右上角即可分享
微信分享提示