首页 > 其他分享 >P6667 [清华集训2016] 如何优雅地求和 -Binomial Sum

P6667 [清华集训2016] 如何优雅地求和 -Binomial Sum

时间:2023-09-23 11:25:02浏览次数:40  
标签:int Sum Binomial ax mathcal binom 2016 sum mod

题面

有一个多项式函数 \(f(x)\),最高次幂为 \(x^m\),定义变换 \(Q\):

\[Q(f,n,x)=\sum_{k=0}^{n}f(k)\binom{n}{k}x^k(1-x)^{n-k} \]

现在给定函数 \(f\) 和 \(n,x\),求 \(Q(f,n,x)\bmod998244353\)。
出于某种原因,函数 \(f\) 由点值形式给出,即给定 \(a_0,a_1,⋯,a_m\) 共 \(m+1\) 个数,\(f(x)=a_x\)。可以证明该函数唯一。

Solution

不知道为什么没有 Binomial Sum 的题解?
Binomial Sum 算法要求已求得 \(\displaystyle\sum_{i=0}^m a_i[x^i]G(x)^k,k\in[1,n]\)。
然后可以求得 \(\displaystyle\sum_{i=0}^m a_i[x^i]F(G(x))\)。
构造 \(G(x)=e^x,F(x)=(ax+1-a)^n\)。(避免混淆,这里把 \(x\) 写作 \(a\),但是注意 \(a_i\) 和 \(a\) 的区别)
接下来说明这个东西的正确性:
\([x^j]F(G(x))=(ae^x+1-a)^n =\displaystyle\sum_{i=0}^n \binom{n}{i}a^i(1-a)^{n-i}[x^j]e^{ix}\)。
而 \([x^j]e^{ix}=\dfrac{i^j}{j!}\),所以原式\(=\displaystyle\sum_{i=0}^n \binom{n}{i}a^i(1-a)^{n-i}\dfrac{i^j}{j!}\)。
不妨设 \([x^j]f(x)=\frac{a_j}{j!}\),那么 \(\displaystyle \sum_{j=0}^ma_j[x^j]G(x)^k=f(k)\)。(注意 \(a_i\) 并非给定)
式子 \(\displaystyle\sum_{j=0}^ma_j[x^j]\sum_{i=0}^n \binom{n}{i}a^i(1-a)^{n-i}\dfrac{i^j}{j!}\)
\(=Q(f,n,x)\)。
然后按照 Binomial Sum 的现成方法来就可以了。
这里容易发现 \(F\) 满足的一个微分方程:
\((ax+1-a)F'(x)-anF(x)=0\)。

\(G(0)=1\),所以设 \(\mathcal{F}(x)=F(x)\bmod(x-1)^{m+1}\),或\(\mathcal{F}(x+1)=F(x+1)\bmod x^{m+1}=(ax+1)^n \bmod x^{m+1}\)。

微分方程变换为 \((ax+1)F'(x+1)-anF(x+1)=0\),以预备换为关于 \(\mathcal{F}\) 的方程。

考察 \((ax+1)\mathcal{F}'(x+1)-an\mathcal{F}(x+1)\),其不合法的项从哪里来?

显然只有 \(\mathcal{F}'\) 从其原函数的 \(m+1\) 次跨向 \(m\) 次中来。

所以 \((ax+1)\mathcal{F}'(x+1)\),具体地说是后面那个 \(1\mathcal{F}'(x+1)\) 获得了贡献。但是实际上不存在。所以要在右边减去。

所以右边等于 \(-x^m[x^m]F'(x+1)=-na^{m+1}\binom{n-1}{m}x^m\)。

于是右边是一个可以变化、展开的项,令 \(x-1\to x\)。

然后得到 \((ax+1-a)\mathcal{F}'(x)-an\mathcal{F}(x)=-na^{m+1}\binom{n-1}{m}(x-1)^{m}\)。

于是提取系数,具体来说:

设 \([x^i]\mathcal{F}(x)=f_i\),\([x^i]\) 左式 \(=(1-a)(i+1)f_{i+1}+aif_i-anf_i\)。

同时 \([x^i]\) 右式 \(=-na^{m+1}\binom{n-1}{m}\binom{m}{i}(-1)^{m-i}\)。

由于两边多项式相等,系数也相等,左式等于右式,得出 \(f_i\) 递推式。

此时计算得到 \(f_0\) 的值是不明智的。注意到 \(f_{m+1}=0\),倒着推即可。注意特判 \(n\le m\)。

精细实现(预处理连续逆元)可以做到 \(O(m)\),不精细实现则是小常数 \(O(m\log m)\),吊打 NTT。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e4+5,mod=998244353;
int sqr(int x){
	return x*x%mod;
}
int qp(int a,int b){
	if(b==0)return 1;
	return b==1?a:(sqr(qp(a,b>>1))*(b%2?a:1)%mod);
}
int n,m,a,g[maxn],fac[maxn],ifac[maxn];
int f[maxn];
int pow1(int x){
	return x%2?mod-1:1;
}
int Mod(int x){
	return (x%mod+mod)%mod;
}
int C(int a,int b){
	return fac[a]*ifac[b]%mod*ifac[a-b]%mod;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>a;
	for(int i=0;i<=m;i++)cin>>g[i];
	fac[0]=1;
	for(int i=1;i<=m;i++)fac[i]=fac[i-1]*i%mod;
	ifac[m]=qp(fac[m],mod-2);
	for(int i=m-1;i>=0;i--)ifac[i]=ifac[i+1]*(i+1)%mod;
	int res=0;
	if(n<=m){
		for(int i=0;i<=n;i++){
			res+=g[i]*C(n,i)%mod*qp(a,i)%mod*qp(mod+1-a,n-i)%mod;
			res%=mod;
		}
		cout<<res<<endl;
		return 0;
	}
	int bn=ifac[m],am=qp(a,m+1);//(n-1,m),a^m
	for(int i=1;i<=m;i++){
		bn=bn*(n-i)%mod;
	}
	f[m+1]=0;
	for(int i=m;i>=0;i--){
		f[i]=qp(a*(n-i)%mod,mod-2)*Mod((i+1)*(mod+1-a)%mod*f[i+1]%mod-n*am%mod*bn%mod*C(m,i)%mod*pow1(m-i+1)%mod)%mod;
	}
	for(int i=0;i<=m;i++){
		res+=g[i]*f[i]%mod;
		res%=mod;
	}
	cout<<Mod(res)<<endl;
	return 0;
}

标签:int,Sum,Binomial,ax,mathcal,binom,2016,sum,mod
From: https://www.cnblogs.com/kkksc0100/p/how-to-elegantly-sum.html

相关文章

  • [AGC030D] Inversion Sum
    ProblemStatementYouaregivenanintegersequenceoflength$N$:$A_1,A_2,...,A_N$.Letusperform$Q$operationsinorder.The$i$-thoperationisdescribedbytwointegers$X_i$and$Y_i$.Inthisoperation,wewillchooseoneofthefollowingtwoacti......
  • POI2016
    P5967Korale题意有n个东西,每个东西有价值,随便选选出的权值和第k小是多少,并输出方案(权值和相同按照选的集合的字典序排列)。题解第一问:求第k小方案的价值考虑贪心,将价值从小到大排序,用二元组(sum,i)描述前i个数中,选出若干数和为sum,其中必选第i个数。利用小根堆不断取出堆顶,并......
  • Windows-Sqlserver2016对指定数据库进行扩容
    前言:之所以会想起来写这一篇文章,是因为工作中正好需要用到,所以记录一下如何对想要的数据库进行扩容操作实际上在处理这种问题之前,我翻阅了许多文章,也没找到自己想要的答案,也正因为如此打算自己写一篇关于扩容数据库的操作文章 搭建实验环境:在扩容之前,我们先创建一个数据库......
  • 无涯教程-JavaScript - SUMIF函数
    描述您可以使用SUMIF函数对满足指定条件的范围内的值求和。语法SUMIF(range,criteria,[sum_range])争论Argument描述Required/Optionalrange您要通过条件判断的单元格范围。每个范围中的单元格必须是数字或包含数字的名称,数组或引用。空白和文本值将被忽略。......
  • 无涯教程-JavaScript - SUM函数
    描述SUM函数可添加值。语法SUM(number1,[number2]...)争论Argument描述Required/Optionalnumber1Thefirstnumberyouwanttoadd.Thenumbercanbeavalue,acellreference,oracellrange.Requirednumber2,…Youcanspecifyupto255additionaln......
  • 插座式水壶SOR/2016-181和CSA 22.1非插座式水壶:SOR/2016-181
    插座式水壶SOR/2016-181和CSA22.1非插座式水壶:SOR/2016-181加拿大水壶市场在亚马逊加拿大站点的发展潜力巨大,然而,对于许多卖家来说,如何满足加拿大市场的法规要求却是一个棘手的问题。今天,我们将为您详细解读SOR/2016-181(水壶法规),帮助您轻松应对加拿大市场的挑战!先看下亚马逊平台加......
  • 最近亚马逊严查 电热水壶认证加拿大CSA22.1和SOR/2016-181标准和要求
    最近亚马逊严查电热水壶认证加拿大CSA22.1和SOR/2016-181标准和要求近日,亚马逊平台发布公告,要求在加拿大站销售的所有电水壶必须有ISO17025实验室出具的符合CSA22.1和SOR/2016-181标准的认证证书。卖家们应尽快上传相关资料以避免产品被强制下架,截止日期为2023年10月30日。电水壶......
  • Sketchup 2015、2016、2017、2018、2019、2020、2021、2022、2023(草图大师)下载
    SketchUp是一套直接面向设计方案创作过程的设计工具,其创作过程不仅能够充分表达设计师的思想而且完全满足与客户即时交流的需要,它使得设计师可以直接在电脑上进行十分直观的构思,是三维建筑设计方案创作的优秀工具。草图大师也就是SketchUp,是一个建筑景观专业的3D建模软件,由于运行......
  • 计算机视觉算法中的视频摘要(Video Summarization)
    引言随着数字视频内容的爆炸式增长,如何高效地获取视频的关键信息成为了一个重要的问题。视频摘要(VideoSummarization)作为计算机视觉领域的一个重要研究方向,旨在通过自动化方法从长时间的视频中提取出关键的、代表性的内容,以便用户能够快速浏览和获取视频的核心信息。本文将介绍视......
  • P4071 [SDOI2016] 排列计数
    LLink显然的,答案就是\(C_n^m*D_{n-m}\)#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<set>#include<map>#include<ctime......