zoukankan      html  css  js  c++  java
  • 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);
    }
    
      
     
    作者:xxy
    本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
  • 相关阅读:
    Java中hashCode() 和 equals()
    【转】Java操作Excel竟然这么简单!
    SpringMVC上
    网络基础知识(2)
    网络基础知识 (1)
    线程的安全
    多线程
    字符编码ANSI和ASCII区别、Unicode和UTF-8区别
    序列化对象
    IO流_File类
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/15362423.html
Copyright © 2011-2022 走看看