zoukankan      html  css  js  c++  java
  • 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)

    【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)

    题面

    BZOJ
    洛谷

    题解

    显然交亵渎的次数是(m+1)
    那么这题的本质就是让你求(sum_{i=1}^n i^{m+1}),中间再减掉几项直接暴力就行了。
    所以只要考虑求这个东西。
    比如说斯特林数?

    [m^n=sum_{i=0}^{n}{mchoose i}i!egin{Bmatrix}n\iend{Bmatrix} ]

    那么

    [egin{aligned} sum_{i=1}^n i^m&=sum_{i=1}^nsum_{j=0}^m {ichoose j}j!egin{Bmatrix}m\jend{Bmatrix}\ &=sum_{j=0}^m j!egin{Bmatrix}m\jend{Bmatrix}sum_{i=1}^n{ichoose j}\ &=sum_{j=0}^m j!egin{Bmatrix}m\jend{Bmatrix}{n+1choose j+1}\ &=sum_{j=0}^m egin{Bmatrix}m\jend{Bmatrix}frac{(n+1)^{underline {j+1}}}{j+1} end{aligned}]

    这样子可以做到(O(m^2))
    斯特林数直接(O(m^2))暴力预处理即可。

    讲个笑话,这题我long long都没开就过了。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define MOD 1000000007
    #define ll long long
    inline ll read()
    {
    	ll x=0;bool t=false;char ch=getchar();
    	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    	if(ch=='-')t=true,ch=getchar();
    	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    	return t?-x:x;
    }
    int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
    int S[60][60];
    int Calc(int n,int m)
    {
    	int ret=0;n+=1;
    	for(int j=0;j<=m;++j)
    	{
    		int s=1;for(int k=0;k<=j;++k)s=1ll*s*(n-k+MOD)%MOD;
    		ret=(ret+1ll*S[m][j]*s%MOD*fpow(j+1,MOD-2))%MOD;
    	}
    	return ret;
    }
    ll n,a[55];int m;
    int main()
    {
    	S[0][0]=1;
    	for(int i=1;i<=55;++i)
    		for(int j=1;j<=i;++j)
    			S[i][j]=(1ll*S[i-1][j]*j+S[i-1][j-1])%MOD;
    	int T=read();
    	while(T--)
    	{
    		n=read();m=read();for(int i=1;i<=m;++i)a[i]=read();
    		sort(&a[1],&a[m+1]);int ans=0;
    		for(int i=0;i<=m;++i)
    		{
    			ans=(ans+Calc((n-a[i])%MOD,m+1))%MOD;
    			for(int j=i+1;j<=m;++j)ans=(ans+MOD-fpow((a[j]-a[i])%MOD,m+1))%MOD;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    找工作刷题-------->Java相关
    ElasticSearch--------->批量索引------->推荐方法、注意事项、性能优化
    ElasticSearch--------------------->索引设计--------------------->数据库数据迁移至ES,如何根据tables特点设计ES的index/type/shards数目?
    Oracle------------->PL/SQL---------------->连接oracle数据库
    责任链模式
    程序员必备软件
    反射
    Linux 磁盘扩容
    1.4 java8 LocalDate
    观察者模式
  • 原文地址:https://www.cnblogs.com/cjyyb/p/10450786.html
Copyright © 2011-2022 走看看