生成函数好题!

搬一手铃悬的题解(侵删)

现在只需要考虑怎么求出g和逆变换即可,其实也就是对函数F(x)求F(x+1)和F(x-1)。

直接二项式定理展开发现是个卷积的形式,大力NTT即可。

#include<bits/stdc++.h>
#define N 440000
#define eps 1e-7
#define inf 1e9+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline int read()
{
char ch=0;
int x=0,flag=1;
while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*flag;
}
const int d=3,mo=998244353;
int ksm(int x,int k)
{
int ans=1;
while(k)
{
if(k&1)ans=1ll*ans*x%mo;
k>>=1;x=1ll*x*x%mo;
}
return ans;
}
int rev[N];
void ntt(int *f,int n,int flag)
{
for(int i=0;i<n;i++)
{
rev[i]=(rev[i>>1]>>1)+(i&1)*(n>>1);
if(i<rev[i])swap(f[i],f[rev[i]]);
}
for(int k=2,kk=1;k<=n;k<<=1,kk<<=1)
{
int wn=ksm(d,(mo-1)/k);
if(flag==-1)wn=ksm(wn,mo-2);
for(int i=0;i<n;i+=k)
for(int j=0,w=1;j<kk;j++,w=1ll*w*wn%mo)
{
int t=1ll*w*f[i+j+kk]%mo;
f[i+j+kk]=(f[i+j]-t)%mo;
f[i+j]=(f[i+j]+t)%mo;
}
}
if(flag==-1)
{
int k=ksm(n,mo-2);
for(int i=0;i<n;i++)f[i]=1ll*f[i]*k%mo;
}
}
int a[N],b[N];
void mul(int len)
{
ntt(a,len,+1);ntt(b,len,+1);
for(int i=0;i<len;i++)a[i]=1ll*a[i]*b[i]%mo;
ntt(a,len,-1);
}
int n,m,len,f[N],g[N],fac[N],vac[N];
int main()
{
n=read();ll t;cin>>t;m=(t%(mo-1));len=1;
while(len<2*(n+1))len<<=1;
for(int i=0;i<=n;i++)f[i]=read();
fac[0]=vac[0]=1;
for(int i=1;i<=len;i++)fac[i]=1ll*fac[i-1]*i%mo;
vac[len]=ksm(fac[len],mo-2);
for(int i=len-1;i>=1;i--)vac[i]=1ll*vac[i+1]*(i+1)%mo;
//get g(x)=f(x+1)
for(int i=0;i<=n;i++)a[i]=1ll*f[i]*fac[i]%mo,b[i]=vac[i];
for(int i=n+1;i<len;i++)a[i]=b[i]=0;
reverse(a,a+n+1);mul(len);
for(int i=0;i<=n;i++)g[i]=1ll*vac[i]*a[n-i]%mo;
//solve get g*(x)
for(int i=0;i<=n;i++)g[i]=1ll*ksm(ksm(i+1,m),mo-2)*g[i]%mo;
//get f*(x)=g(x-1)
for(int i=0;i<=n;i++)a[i]=1ll*g[i]*fac[i]%mo,b[i]=1ll*ksm(-1,i)*vac[i]%mo;
for(int i=n+1;i<len;i++)a[i]=b[i]=0;
reverse(a,a+n+1);mul(len);
for(int i=0;i<=n;i++)f[i]=1ll*vac[i]*a[n-i]%mo;
//print f(x)
for(int i=0;i<=n;i++)printf("%d ",(f[i]%mo+mo)%mo);
return 0;
}

CF923E Perpetual Subtraction的更多相关文章

  1. 【CF932E】Perpetual Subtraction(NTT,线性代数)

    [CF932E]Perpetual Subtraction(NTT,线性代数) 题面 洛谷 CF 题解 设\(f_{i,j}\)表示\(i\)轮之后这个数恰好为\(j\)的概率. 得到转移:\(\di ...

  2. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...

  3. Codeforces 923E - Perpetual Subtraction(微积分+生成函数+推式子+二项式反演+NTT)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 首先考虑最朴素的 \(dp\),设 \(dp_{z,i}\) 表示经 ...

  4. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  5. ZJOI2018游记Round1

    广告 ZJOI2018Round2游记 All Falls Down 非常感谢学弟学妹们捧场游记虽然这是一篇假游记 ZJOI Round1今天正式落下帷幕.在这过去的三天里遇到了很多朋友,见识了很多有 ...

  6. PAT 解题报告 1050. String Subtraction (20)

    1050. String Subtraction (20) Given two strings S1 and S2, S = S1 - S2 is defined to be the remainin ...

  7. [leetcode-592-Fraction Addition and Subtraction]

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  8. [LeetCode] Fraction Addition and Subtraction 分数加减法

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  9. [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

随机推荐

  1. SVN的安装和启动SVN的安装

    SVN的安装和启动SVN的安装 i. windows下安装SVN 首先要先下载SVN服务器,下载地址https://www.visualsvn.com/downloads/ 下载软件VisualSVN ...

  2. REST framework---基于类的视图

    一.程序设计 1.路由设计 from django.conf.urls import url from django.contrib import admin from app import view ...

  3. python,day3,函数基础-3

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 1.函数基本语法及特性 函数是什么? 函数一词 ...

  4. Javascript基础语法(二)

    三.运算符 1. 算术运算符  + - * / % ++ -- 1.1赋值运算符 = += . -= .*=. /= 1 +=2;  ==>   1 = 1 + 2; 2. 比较运算符 > ...

  5. urlconnection代码

    package com.yucheng.connection; import java.io.BufferedReader; import java.io.InputStream; import ja ...

  6. antd-design TextArea initialValue 不生效可能原因

    <Form.Item label="展会介绍"> {getFieldDecorator('introduce', { initialValue:record.intro ...

  7. 取代iframe,实现页面中引入别的页面

    <li> <a href="#addChannel">添加通道</a> </li> window.onload = rightCha ...

  8. Xshell连接Linux慢问题解决办法

    由于各种原因,经常更换网络环境,然后发现,每次更换网络环境后,xshell连接虚拟机的rhel或者CentOS都几乎是龟速.... 今天专门查了一下解决方案: 原来是ssh的服务端在连接时会自动检测d ...

  9. TeamCity 创建docker构建步骤

    1 dockerfile source 选择dockerfile文件的路径,一共有三种方式: 1.1.1 file content 这种方式是在线写dockerfile文件. 其在进行创建的时候会在 ...

  10. ElasticSearch(八)Elasticsearch-head 连接不上Elasticsearch的原因和解决方案

    在上篇博文里ElasticSearch(七) Elasticsearch在Centos下搭建可视化服务中已经访问到了可视化界面.然后兴奋地进行了数据提交测试,提交啊,刷新啊,就是看不到数据变化,仔细一 ...