题目

比较厉害的题目了

\[\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. __str__方法

    """str()就是可以自定义输出返回值,必须是str字符串""" class Dog: def __init__(self, name): ...

  2. 引入CSS样式表(书写位置)

    CSS可以写到那个位置? 是不是一定写到html文件里面呢? 内部样式表 内嵌式是将CSS代码集中写在HTML文档的head头部标签中,并且用style标签定义,其基本语法格式如下: <head ...

  3. 【命令】Maven命令

    当前项目的依赖树: mvn dependency:tree -U.-B.-e -U参数: 该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默 ...

  4. [JZOJ 5818] 做运动

    题意:带温度最短路. 思路: 我们将温度从小到大的将边加入,用并查集维护连通性. 如果一旦联通那么跑一遍\(spfa\)就可以得到答案. 复杂度\(O(m log m)\) #include < ...

  5. nutch集成solr和中文分词

    nutch集成solr和中文分词 一.构建nutch环境 1. 设置代理 由于nutch使用ant构建,ant调用ivy,会从maven仓库中下载依赖包,因此若公司需要代理才能上网,需要设置代理,如果 ...

  6. idea不断提示=========>This file is indented with tabs instead of 4 spaces

    file->other settings ->default settings

  7. 剑指offer——11旋转数组中最小的数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  8. Day15:Python 【模块】及__name__:

    什么是模块: 在Python中,随着这代码的撰写,代码越来越长,所以产生了,模块这个概念,模块是什么?模块就是一个.py文件,在撰写代码时,我们把不同的功能的代码封装到一个.py文件里,用得时候导入 ...

  9. 基于pandas数据预处理基础操作

    # -*- coding: utf-8 -*- import numpy as np import pandas as pd #一.创建数据 #1.通过传递一个list对象来创建一个Series,pa ...

  10. R:ggplot2数据可视化——进阶(3)

    Part 3: Top 50 ggplot2 Visualizations - The Master List, 结合进阶1.2内容构建图形 有效的图形是: 不扭曲事实 传递正确的信息 简洁优雅 美观 ...