首页 > 其他 > 详细

CF891E Lust

时间:2020-06-04 20:56:22      阅读:45      评论:0      收藏:0      [点我收藏+]

传送门

一次操作对答案的贡献是

\[\prod\limits_{i=1,i\ne x}^{n}a_i=\prod\limits_{i=1}^{n}a_i-(a_x-1)\prod\limits_{i=1,i\ne x}^{n}a_i \]

我们设等式右侧的减号左边为\(S_1\),右侧为\(S_2\)会得到总贡献为

\[S_1-S_2+S_2-S_3+S_3-S_4+……+S_k-S_{k+1} \]

假设第\(i\)个数被选择\(b_i\)次,那么答案就是

\[\prod a_i-\prod(a_i-b_i) \]

我们只要求后面那部分的期望

\[E=\frac{1}{n^k}\sum\limits_{\sum b_i=k}\frac{k!}{\prod (b_i)!}\prod (a_i-b_i) \]

\[=\frac{k!}{n^k}\sum\limits_{\sum b_i=k}\prod \frac{(a_i-b_i)}{b_i} \]

将他写成指数生成函数的形式

\[=\frac{k!}{n^k}[x^k]\prod\limits_{i=1}^{n}\sum\limits_{j=0}\frac{a_i-j}{j!}x^j \]

\[=\frac{k!}{n^k}[x^k]\prod\limits_{i=1}^{n}\sum\limits_{j=0}(a_i\frac{x^j}{j!}-j\frac{x^j}{j!}) \]

\[=\frac{k!}{n^k}[x^k]\prod\limits_{i=1}^{n}(a_ie^x-\sum\limits_{j=0}\frac{x^j}{(j-1)!}) \]

\[=\frac{k!}{n^k}[x^k]\prod\limits_{i=1}^{n}(a_ie^x-\sum\limits_{j=0}x\frac{x^j}{j!}) \]

\[=\frac{k!}{n^k}[x^k]\prod\limits_{i=1}^{n}(a_ie^x-xe^x) \]

\[=\frac{k!}{n^k}[x^k](e^{nx}\prod\limits_{i=1}^{n}(a_i-x)) \]

右边的\(\prod\limits_{i=1}^{n}(a_i-x)\)可以\(O(n^2)\)乘出来,设\(f(x)\)为得到的多项式

\[=\frac{k!}{n^k}[x^k](\sum\limits_{i=0}\frac{(nx)^i}{i!}\sum\limits_{j=0}f_jx^j) \]

\[=\frac{k!}{n^k}[x^k](\sum\limits_{t=0}x^t\sum\limits_{i+j=t}\frac{n^if_j}{i!}) \]

\[=\sum\limits_{i+j=k}\frac{k^{\underline{k-i}}c_j}{n^{k-i}}\]

\[=\sum\limits_{i=0}^{min(n,k)}\frac{k^{\underline{i}}c_i}{n^i}\]

所以

\[ans=\prod a_i-\sum\limits_{i=0}^{min(n,k)}\frac{k^{\underline{i}}c_i}{n^i} \]

#include<bits/stdc++.h>
using namespace std;
namespace red{
#define int long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(i) ((i)&(-i))
	inline int read()
	{
		int x=0;char ch,f=1;
		for(ch=getchar();(ch<‘0‘||ch>‘9‘)&&ch!=‘-‘;ch=getchar());
		if(ch==‘-‘) f=0,ch=getchar();
		while(ch>=‘0‘&&ch<=‘9‘){x=(x<<1)+(x<<3)+ch-‘0‘;ch=getchar();}
		return f?x:-x;
	}
	const int N=4e5+10,p=1e9+7;
	int n,k,ans,len;
	int fac[N],inv[N];
	int a[N];
	int f[N],g[N],h[N];
	inline void add(int &x,int y)
	{
		x+=y;
		if(x>=p) x-=p;
		if(x<0) x+=p;
	}
	inline int fast(int x,int k)
	{
		int ret=1;
		while(k)
		{
			if(k&1) ret=ret*x%p;
			x=x*x%p;
			k>>=1;
		}
		return ret;
	}
	inline void main()
	{
		n=read(),k=read();
		ans=1;f[0]=1;len=0;
		for(int i=1;i<=n;++i)
		{
			a[i]=read();
			ans=ans*a[i]%p;
			g[0]=a[i],g[1]=-1;
			for(int j=0;j<i;++j)
			{
				for(int k=0;k<=1;++k)
				{
					add(h[j+k],f[j]*g[k]%p);
				}
			}
			for(int j=0;j<=i;++j) f[j]=h[j],h[j]=0;
		}
		for(int tmp=1,i=0;i<=min(n,k);++i,tmp=tmp*n%p)
		{
			int ret=f[i];
			for(int j=k,d=i;d;--d,--j) ret=ret*j%p;
			ret=ret*fast(tmp,p-2);
			add(ans,-ret%p);
		}
		printf("%lld\n",ans);
	}
}
signed main()
{
	red::main();
	return 0;
}

CF891E Lust

原文:https://www.cnblogs.com/knife-rose/p/13045683.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!