zoukankan      html  css  js  c++  java
  • noi.ac day5t1 count

    传送门

    分析

    首先一个很重要的性质是每个数至少出现一次

    所以只有一个数会出现两次

    我们只需要求出n+1个数选k个数的方案数再减去重复的部分即可

    重复部分于两个相同数中间的距离有关,详见代码

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    const int mod = 1e9+7;
    int p[100100];
    inline int pw(int x,int p){
        x%=mod;
        int res=1;
        while(p){
          if(p&1)res=(long long)res*x%mod;
          x=(long long)x*x%mod;
          p>>=1;
        }
        return res;
    }
    inline int c(int n,int m){
        if(m>n)return 0;
        return (long long)p[n]*pw(p[m],mod-2)%mod*pw(p[n-m],mod-2)%mod;
    }
    int sum[100100],a[100100];
    int main(){
        int n,m,i,j,k,wh;
        scanf("%d",&n);
        for(i=1;i<=n;i++){
          scanf("%d",&a[i]);
          if(sum[a[i]])wh=i-sum[a[i]];
          sum[a[i]]=i;
        }
        p[0]=p[1]=1;
        for(i=2;i<=n+1;i++)p[i]=(long long)p[i-1]*i%mod;
        for(k=1;k<=n+1;k++)
          printf("%d
    ",(c(n+1,k)-c(n-wh,k-1)+mod)%mod);
        return 0;
    }
  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    Redis的那些最常见面试问题
    线程池全面解析
    对线程调度中Thread.sleep(0)的深入理解
    集群环境下Redis分布式锁
    3.8
    3.7
    3.6任务
    3.5任务
    3.4
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9894931.html
Copyright © 2011-2022 走看看