题目

比较厉害的题目了

\[\sum_{i=0}^{\infty}\sum_{j=0}^nf_ji^jr^i
\]

改变一下求和顺序

\[\sum_{j=0}f_j\sum_{i=0}^{\infty}i^jr^i
\]

我们发现只要对于\(k=[0,m]\),求出\(\sum_{i=0}^{\infty}i^kr^i\)就可以了

不妨把这个要求的东西看成一个关于\(r\)的多项式\(g_k(r)=\sum_{i=0}^{\infty}i^kr^i\)

显然有

\[\frac{g_k(r)}{r}=\sum_{i=0}^{\infty}i^kr^{i-1}
\]

对于\(k>0\),就有\(\frac{g_k(r)}{r}=\sum_{i=0}^{\infty}(i+1)^kr^{i}\)

我们那这个式子减掉\(g_k(r)\)

\[(\frac{1}{r}-1)g_k(r)=\sum_{i=0}^\infty ((i+1)^k-i^k)r^i
\]

我们用二项式订定理展开一下\((i+1)^k-i^k\),这个显然应该是\(\sum_{j=0}^{k-1}\binom{k}{j}i^j\)

\[(\frac{1}{r}-1)g_k(r)=\sum_{i=0}^\infty r^i\sum_{j=0}^{k-1}\binom{k}{j}i^j
\]

改变一下求和顺序

\[(\frac{1}{r}-1)g_k(r)=\sum_{j=0}^{k-1}\binom{k}{j}\sum_{i=0}^\infty i^jr^i=\sum_{j=0}^{k-1}\binom{k}{j}g_j(r)
\]

我们大力拆开组合数就得到了

\[\frac{g_k(r)}{k!}=\sum_{i=0}^{k-1}\frac{g_j(r)}{j!}\times \frac{r}{(k-j)!\times (1-r)}
\]

显然自己卷自己,多项式求逆即可,注意边界\(g_0(r)=\sum_{i=0}^\infty r^i=\frac{1}{1-r}\)

代码

#include<bits/stdc++.h>
#define re register
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=262144+5;
const int mod=998244353;
const int G[2]={3,(mod+1)/3};
inline int ksm(int a,int b) {
int S=1;
for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;
return S;
}
int n,m,len,rev[maxn],fac[maxn],inv[maxn],ifac[maxn];
int a[maxn],b[maxn],C[maxn];
inline void NTT(int *f,int o) {
for(re int i=0;i<len;i++) if(i<rev[i]) std::swap(f[i],f[rev[i]]);
for(re int i=2;i<=len;i<<=1) {
int ln=i>>1,og1=ksm(G[o],(mod-1)/i);
for(re int t,og=1,l=0;l<len;l+=i,og=1)
for(re int x=l;x<l+ln;++x) {
t=1ll*f[x+ln]*og%mod;og=1ll*og*og1%mod;
f[x+ln]=(f[x]-t+mod)%mod;f[x]=(f[x]+t)%mod;
}
}
if(!o) return;
int Inv=ksm(len,mod-2);
for(re int i=0;i<len;i++) f[i]=1ll*f[i]*Inv%mod;
}
void Inv(int n,int *A,int *B) {
if(n==1) {A[0]=ksm(B[0],mod-2);return;}
Inv((n+1)>>1,A,B);len=1;
while(len<n+n-1) len<<=1;
for(re int i=0;i<len;i++) rev[i]=rev[i>>1]>>1|((i&1)?len>>1:0);
for(re int i=0;i<n;i++) C[i]=B[i];
for(re int i=n;i<len;i++) C[i]=0;
NTT(C,0),NTT(A,0);
for(re int i=0;i<len;i++) A[i]=(2ll*A[i]-1ll*C[i]*A[i]%mod*A[i]%mod+mod)%mod;
NTT(A,1);for(re int i=n;i<len;i++) A[i]=0;
}
int main() {
n=read(),m=read();fac[0]=ifac[0]=inv[1]=1;
for(re int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod;
for(re int i=2;i<=n;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(re int i=1;i<=n;i++) ifac[i]=1ll*ifac[i-1]*inv[i]%mod;
int t=ksm(m,mod-2);t=(1+mod-t)%mod;t=ksm(t,mod-2);
for(re int i=1;i<=n;i++) b[i]=1ll*ifac[i]*t%mod;
b[0]=1;Inv(n+1,a,b);
int ans=0;
for(re int i=0;i<=n;i++) ans=(ans+1ll*fac[i]*a[i]%mod*read()%mod)%mod;
printf("%d\n",1ll*ans*ksm(1-m+mod,mod-2)%mod);
return 0;
}

【LGP5349】幂的更多相关文章

  1. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  2. POJ1026 Cipher(置换的幂运算)

    链接:http://poj.org/problem?id=1026 Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  3. C语言 · 2的次幂表示

    问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 ...

  4. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  5. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  6. 51nod1228 序列求和(自然数幂和)

    与UVA766 Sum of powers类似,见http://www.cnblogs.com/IMGavin/p/5948824.html 由于结果对MOD取模,使用逆元 #include<c ...

  7. UVA766 Sum of powers(1到n的自然数幂和 伯努利数)

    自然数幂和: (1) 伯努利数的递推式: B0 = 1 (要满足(1)式,求出Bn后将B1改为1 /2) 参考:https://en.wikipedia.org/wiki/Bernoulli_numb ...

  8. Codeforces632E Thief in a Shop(NTT + 快速幂)

    题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...

  9. GDUFE-OJ 1203x的y次方的最后三位数 快速幂

    嘿嘿今天学了快速幂也~~ Problem Description: 求x的y次方的最后三位数 . Input: 一个两位数x和一个两位数y. Output: 输出x的y次方的后三位数. Sample ...

随机推荐

  1. 概率期望+闭包+bitset优化——hdu5036

    我们首先得到:     暴力打开这个箱子,能够开那些箱子.这个可以用bitset来进行状态压缩. 用闭包传递来解决这一步     然后,对于每个箱子,我们考虑有多少种方法,使:暴力打开某些箱子,同时能 ...

  2. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

  3. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  4. pycharm 使用心得(一)安装和首次使用

    PyCharm 是我用过的python编辑器中,比较顺手的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. 首先预览一下 PyCharm 在实际应用中的界面:(更改了PyC ...

  5. error C2443: operand size conflict

    #include <stdio.h> void main() { int a=98; __asm {     mov al,a     and al,11011111B     mov a ...

  6. UVA 240 Variable Radix Huffman Encoding

    题目链接:https://vjudge.net/problem/UVA-240 题目大意 哈夫曼编码是一种最优编码方法.根据已知源字母表中字符出现的频率,将源字母表中字符编码为目标字母表中字符,最优的 ...

  7. spark-submit 应用程序第三方jar文件

    第一种方式:打包到jar应用程序 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式:spark-submit 参数 ...

  8. 零基础入门学习python--第一章

    知识点汇总1. Python的应用范围:操作系统.3D动画.WEB.企业应用.云计算等.2. Python是什么类型的语言?脚本语言,即电脑编程语言,比C.C++或java之类的系统编程语言简单容易. ...

  9. 小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP

    题意:自己看题目,中文体面. 题解: 把所有不能走的路径放入AC自动机中. 然后DP[i][j]表示走到 i 这个点,且位于AC自动机 j 这个节点最短距离 然后直接DP即可.注意一点会爆int #i ...

  10. 城市代码表mysql

    只有代码: # ************************************************************ # Sequel Pro SQL dump # Version ...