题目描述:求

$$\sum_{k=0}^nf(k)\binom{n}{k}x^k(1-x)^{n-k}$$

输入$n$,$f(x)$的次数上界$m$,$x$,$f(0,1,\ldots,m)$,对$998244353$取模。

数据范围:$1\leq n\leq 10^9,1\leq m\leq 2*10^4,0\leq a_i,x<998244353$


现在来讲正解:首先我们把$f(x)$用下降幂来表示,(看到这里的快点关掉,然后自己推一推)

$$\begin{align*}Ans&=\sum_{k=0}^n\sum_{i=0}^ma_i*\frac{k!}{(k-i)!}\frac{n!}{k!(n-k)!}x^k(1-x)^{n-k} \\&=\sum_{k=0}^n\sum_{i=0}^ma_i*\frac{n!}{(k-i)!(n-k)!}x^k(1-x)^{n-k} \\&=\sum_{i=0}^ma_in!\sum_{k=i}^n\frac{x^k}{(k-i)!}*\frac{(1-x)^{n-k}}{(n-k)!} \\&=\sum_{i=0}^ma_ix^in!(e^x*e^{1-x}[x^{n-i}]) \\&=\sum_{i=0}^ma_ix^i\frac{n!}{(n-i)!}\end{align*}$$

然后就是考虑如何点值转下降幂

$$\begin{align*}f(i)&=\sum_{j=0}^ma_j\frac{i!}{(i-j)!} \\\frac{f(i)}{i!}&=\sum_{j=0}^ma_j*\frac{1}{(i-j)!}\end{align*}$$

所以$f(i)$的EGF等于$a$的OGF乘上$e^x$,所以$a$的OGF等于$f(i)$的EGF乘上$e^{-x}$,使用NTT优化计算,时间复杂度$O(m\log m)$

 #include<bits/stdc++.h>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = << , mod = , G = , Gi = ;
int n, m, x, A[N], B[N], fac[N], invfac[N], ans;
inline int kasumi(int a, int b){
int res = ;
while(b){
if(b & ) res = (LL) res * a % mod;
a = (LL) a * a % mod;
b >>= ;
}
return res;
}
inline void init(){
fac[] = ;
for(Rint i = ;i <= m;i ++) fac[i] = (LL) i * fac[i - ] % mod;
invfac[m] = kasumi(fac[m], mod - );
for(Rint i = m;i;i --) invfac[i - ] = (LL) i * invfac[i] % mod;
}
int rev[N];
inline int calrev(int len){
int limit = , L = -;
while(limit <= len){limit <<= ; L ++;}
for(Rint i = ;i < limit;i ++)
rev[i] = (rev[i >> ] >> ) | ((i & ) << L);
return limit;
}
inline void NTT(int *A, int limit, int type){
for(Rint i = ;i < limit;i ++)
if(i < rev[i]) swap(A[i], A[rev[i]]);
for(Rint mid = ;mid < limit;mid <<= ){
int Wn = kasumi(type == ? G : Gi, (mod - ) / (mid << ));
for(Rint j = ;j < limit;j += (mid << )){
int w = ;
for(Rint k = ;k < mid;k ++, w = (LL) w * Wn % mod){
int x = A[j + k], y = (LL) w * A[j + k + mid] % mod;
A[j + k] = (x + y) % mod;
A[j + k + mid] = (x - y + mod) % mod;
}
}
}
if(type == -){
int inv = kasumi(limit, mod - );
for(Rint i = ;i < limit;i ++)
A[i] = (LL) A[i] * inv % mod;
}
}
int main(){
scanf("%d%d%d", &n, &m, &x);
init();
for(Rint i = ;i <= m;i ++){
scanf("%d", A + i);
A[i] = (LL) A[i] * invfac[i] % mod;
B[i] = invfac[i];
if(i & ) B[i] = mod - B[i];
}
int limit = calrev(m << );
NTT(A, limit, ); NTT(B, limit, );
for(Rint i = ;i < limit;i ++) A[i] = (LL) A[i] * B[i] % mod;
NTT(A, limit, -);
int w = ;
for(Rint i = ;i <= m;i ++){
ans = (ans + (LL) w * A[i] % mod) % mod;
w = (LL) w * (mod + n - i) % mod * x % mod;
}
printf("%d", ans);
}

UOJ269

启发:推柿子遇到多项式时应考虑多项式的各种形式,如点值,普通/上升/下降幂等。

UOJ269【清华集训2016】如何优雅地求和【数论,多项式】的更多相关文章

  1. UOJ269 清华集训2016 如何优雅地求和 下降幂多项式、NTT

    代码 神仙题? 看到连续的点值,那么一定是要利用到连续点值的性质,可以考虑下降幂多项式,即考虑多项式\(F(x) = \sum\limits_{i=0}^m a_ix^{\underline i}\) ...

  2. [清华集训2016]如何优雅地求和——NTT

    题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f, ...

  3. 洛谷 P6667 - [清华集训2016] 如何优雅地求和(下降幂多项式,多项式)

    题面传送门 wjz:<如何优雅地 AK NOI> 我:如何优雅地爆零 首先,按照这题总结出来的一个小套路,看到多项式与组合数结合的题,可以考虑将普通多项式转为下降幂多项式,因为下降幂和组合 ...

  4. UOJ #269. 【清华集训2016】如何优雅地求和

    UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...

  5. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]

    #274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...

  6. UOJ_274_[清华集训2016]温暖会指引我们前行_LCT

    UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. ...

  7. UOJ 275. 【清华集训2016】组合数问题

    UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...

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

    [UOJ274][清华集训2016]温暖会指引我们前行 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很 ...

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

    [UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...

  10. [UOJ#274][清华集训2016]温暖会指引我们前行

    [UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...

随机推荐

  1. AWS成本估算的相关小工具

    1.AWS-partner :云势数据做的在线小工具,有微信版本可以使用,但是涉及的服务很少,更新慢,型号缺,界面不友好.不是很理想,连接如下:     https://www.goclouds.cn ...

  2. AWS--Lamdba

    分享一个Lambda相关的连接 https://blog.csdn.net/m0_37204491/article/details/72829477

  3. 【面试突击】-RabbitMQ常见面试题(二)

    问题一:RabbitMQ 中的 broker 是指什么?cluster 又是指什么? 答:broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应 ...

  4. tcp、udp协议栈

    tcp struct tcphdr { __be16 source; //源端口 __be16 dest; //目的端口 __be32 seq; //序列号 __be32 ack_seq; //确认号 ...

  5. 爬取网易云音乐歌手和id

    pip install lxml csv requests from lxml import etree from time import sleep import csv import reques ...

  6. centos7 docker安装nginx

    1.查询nginx最新镜像 docker search nginx 2.下载镜像 docker pull nginx 3.创建目录 mkdir -p /software/nginx/html mkdi ...

  7. 学会 Debug

    如何成为优秀程序员第 2/100 期分享 01 调试(Debug)是成为一个程序员的基石. 调试这个词第一个含义即是移除错误,但真正有意义的含义是,通过检查来观察程序的运行.一个不会调试的程序员等同于 ...

  8. 数据库开发-Django ORM的一对多查询

    数据库开发-Django ORM的一对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...

  9. linux命令提示符上色

    vi /etc/profile RED='\[\e[31;1m\]' Yello='\[\e[33;1m\]' Green='\[\e[32;1m\]' End='\[\e[0m\]' Pur='\[ ...

  10. HTTP Status 500 - DateConverter does not support default String to 'Date' conversion.错误

    //自己指定一个类型转换器(将String转成Date) DateConverter converter = new DateConverter(); converter.setPattern(new ...