uoj#269. 【清华集训2016】如何优雅地求和(数论)

传送门

首先,如果\(f(x)=1\),那么根据二项式定理,有\(Q(f,n,k)=1\)

当\(f(x)=x\)的时候,有\[Q=\sum_{i=0}^ni\times \frac{n!}{i!(n-i)!}k^i(1-k)^{n-i}\]
\[Q=\sum_{i=0}^nnk\times \frac{(n-1)!}{(i-1)!(n-i)!}k^{i-1}(1-k)^{n-i}\]
\[Q=nk\sum_{i=0}^n\frac{(n-1)!}{(i-1)!(n-i)!}k^{i-1}(1-k)^{n-i}\]
\[Q=nk\sum_{i=0}^n{n-1\choose i-1}k^{i-1}(1-k)^{n-i}\]
根据二项式定理后面的等于\(1\),所以\(Q=nk\)

然后我们发现,如果\(f(x)=x^{\underline{d}}\),则有\(Q=n^{\underline{d}}k^d\),其中\(x^{\underline{d}}\)是\(x\)的\(d\)次下降幂,为\(x(x-1)...(x-d+1)\),证明和上面的差不多当
\[Q=\sum_{i=0}^ni^{\underline{d}}\times \frac{n!}{i!(n-i)!}k^i(1-k)^{n-i}\]
\[Q=\sum_{i=0}^nn^{\underline{d}}x^d\times \frac{(n-d)!}{(i-d)!(n-i)!}k^{i-d}(1-k)^{n-i}\]
\[Q=n^{\underline{d}}k^d\sum_{i=0}^n \frac{(n-d)!}{(i-d)!(n-i)!}k^{i-d}(1-k)^{n-i}\]
\[Q=n^{\underline{d}}k^d\sum_{i=0}^n{n-d\choose i-d}k^{i-d}(1-k)^{n-i}\]
后面那个还是等于\(1\)

根据乘法分配律,如果\(f(x)=\sum_{i=0}^m a_ix^{\underline{i}}\),那么\(Q(f,n,x)=\sum_{i=0}^m a_i\times Q(x^{\underline{i}},n,k)\)

考虑如何计算\(a_i\),记\(b_i=\frac{a_i}{i!}\),那么\(f(x)=\sum_{i=0}^m b_i\frac{x^{\underline{i}}}{i!}=\sum_{i=0}^m b_i{x\choose i}\)

不要忘了我们已知\(x=0,1,...,m\)时\(f(x)\)的值

当\(x=0\)时,\(f(x)=b_0\)

记\(\triangle f(x)=f(x+1)-f(x)\),即一阶差分,因为\({x+1\choose i}-{x\choose i}={x\choose i-1}\),所有\(\triangle f(x)=\sum_{i=1}^m b_i{x\choose i-1}\),那么\(\triangle f(0)=b_1\)

同理,\(\triangle^kf(0)=b_k\),即\(k\)阶差分后\(0\)处的值为\(b_k\)

因为std写的是\(O(m^2)\)的我们不能辜负出题人的一片好心,所以直接\(O(m^2)\)暴力就好了(据说这里可以用$FFT优化然而懒了233)

然后没有然后了

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
    R int res,f=1;R char ch;
    while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
    for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
    return res*f;
}
const int N=2e4+5,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
    R int res=1;
    for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
    return res;
}
int b[N],n,m,k,ans,p=1;
int main(){
//  freopen("testdata.in","r",stdin);
    n=read(),m=read(),k=read();
    fp(i,0,m)b[i]=read();
    fp(i,0,m){
        ans=add(ans,mul(p,b[0]));
        fp(j,0,m-i-1)b[j]=dec(b[j+1],b[j]);
        p=1ll*p*k%P*(n-i)%P*ksm(i+1,P-2)%P;
    }printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/bztMinamoto/p/10237912.html

时间: 2024-08-01 20:56:07

uoj#269. 【清华集训2016】如何优雅地求和(数论)的相关文章

【UOJ274】【清华集训2016】温暖会指引我们前行 LCT

[UOJ274][清华集训2016]温暖会指引我们前行 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的宿舍楼中有n个地点和一些路,一条路连接了两个地点,小R可以通过这条路从其中任意一个地点到达另外一个地点.但在刚开始,小R还不熟悉宿舍楼中的任何一条路,所以他会慢慢地发现这些路,他在发现一条路时还会知道这条路的温度和长度.每条路的温度都是互不相同的. 小R需要在宿舍楼中活动,每次他都需要从

bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct

[清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希望!” 只见他的身体中喷射出火焰之力 通过坚固的钢铁,传遍了千家万户 这时,只听见人们欢呼 “暖气来啦!” 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很低. 小R的

【UOJ】#273. 【清华集训2016】你的生命已如风中残烛

题目链接:http://uoj.ac/problem/273 $${Ans=\frac{\prod _{i=1}^{m}i}{w-n+1}}$$ 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8

UOJ 274 【清华集训2016】温暖会指引我们前行 ——Link-Cut Tree

魔法森林高清重置, 只需要维护关于t的最大生成树,然后链上边权求和即可. 直接上LCT 调了将近2h 吃枣药丸 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i&g

uoj#268. 【清华集训2016】数据交互(动态dp+堆)

传送门 动态dp我好像还真没咋做过--通过一个上午的努力光荣的获得了所有AC的人里面的倒数rk3 首先有一个我一点也不觉得显然的定理,如果两条路径相交,那么一定有一条路径的\(LCA\)在另一条路径上 于是我们可以对于每一个点记录两个值,一个\(a_i\)表示\(LCA\)在\(i\)点的所有路径的权值之和,一个是\(b_i\),表示经过点\(i\)且\(LCA\)不在点\(i\)的所有路径的权值之和 那么对于一条路径\((u,v)\),它的权值就是\(b_{LCA(u,v)}+\sum_{i\

uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

传送门 一道打表题 我们把那些普通牌的位置看成\(-1\),那么就是要求有多少个排列满足前缀和大于等于\(1\) 考虑在最后放一个\(-1\),那么就是除了\(m+1\)的位置前缀和都要大于等于\(1\) \(m+1\)个数的圆排列的方案数为\(m!\),然后对于每一个圆排列,肯定存在一个前缀和最小且最右边的位置,那么它后面的所有位置肯定前缀和都大于等于\(1\),而对于这个位置如果不把它放最后肯定会有前缀和小于\(1\) 所以对于每一种圆排列有且仅有一种摆放方式合法 然而此时最后的这个\(-1

UOJ#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强

传送门 设运算 \(op1,op2\),一个表示三进制不进位的加法,一个表示不退位的减法 设 \(cnt1[x],cnt2[x]\) 分别表示 \(x\) 转成三进制后 \(1/2\) 的个数 那么 \(f_{i,x}=\sum f_{i-1,y}b_{cnt1[x~op2~y],cnt2[x~op2~y]}\) 设 \(B_{x,y}=b_{cnt1[x~op2~y],cnt2[x~op2~y]}\) 那么可以发现 \(B_{x,y}=B_{x~op2~y,0}\) 那么我们要求的就是 \(f

UOJ #276. 【清华集训2016】汽水

TMD写了一篇博客竟然还不够清醒,那就再写一篇睡觉去了 首先一看题目就会发现这可以先套上个分数规划,即我们现在要最小化\(|\frac{\sum_{i=1}^{len} w_i}{len}-k|\) 考虑二分答案\(x\),顺便拆掉绝对值,即\(-x\le\frac{\sum_{i=1}^{len} w_i}{len}-k\le x\),发现其实只要同时满足: \[\sum_{i=1}^{len} w_i-k+x \ge 0\] \[\sum_{i=1}^{len} w_i-k-x \le 0\

【清华集训2016】如何优雅地求和

首先,这种形式肯定是把组合数消掉一点,然后后面再二项式定理处理一下.但是怎么搞呢? 开始尝试了拉格朗日插值,但是有一项非常毒瘤.(我甚至少抄一项推出了 \(O(n)\) 的式子--) 要消掉组合数一定是与阶乘有关的形式.连续点值启发着我们使用下降幂.众所周知,点值转下降幂系数只需要卷上一个 \(e^{-x}\) 即可. 这时候考虑只用式子里代入下降幂: \[ \begin{align*} & \sum_{k=0}^n k^{\underline{m}} \binom{n}{k} x^k \lef