• 题解:

    • 令$a(x)$为破坏死光的$EFG$,$f(x)$为方案的$EGF$:$f(x) = x + \int \  \frac{1}{2} f^2(x) a(x) \  dt$;
    • 注意到$f(0)=0$,所以考虑如何解:$f'(x) =  \frac{1}{2} a(x) f(x)^2 + 1$
    • 设$g(f) = 1 + \frac{1}{2}af^2$,即求解$f' = g(f)$;
    • 主要思想是牛顿迭代,假设已经求得$f  \equiv f_{0}   \pmod {x^{n}} $:
    • 泰勒展开得:$f' \equiv g(f_{0}) + g'(f_{0})(f - f_{0}) \pmod {x^{2n}} $
    • $f' - g'(f_{0})f \equiv g(f_{0}) - g'(f_{0})f_{0} $
    • 进一步令:$r \equiv e ^ {\int \  - g'(f_{0}) \ dt}$,(注意有$r' = -g'(f_{0}) r$)
    • 两边同时乘以$r$ 得到:
    • $f'r - fr' \equiv  (g(f_{0}) - g'(f_{0})f_{0}) r$
    • $(fr)' \equiv (g(f_{0}) - g'(f_{0})f_{0}) r$
    • $ f \equiv \frac{  \int \  (1 - \frac{1}{2}af_{0}^{2})r \ dt }{r} \pmod {x^{2n}}$
    • 就可以求了;
 #include<bits/stdc++.h>
#define mod 998244353
#define Run(i,l,r) for(int i=l;i<=r;++i)
#define Don(i,l,r) for(int i=l;i>=r;--i)
const int N=<<;
using namespace std;
int n,a[N],fac[N],ans[N];
char s[N],ps[],*pp=ps;
int pw(int x,int y){
if(y<)y+=mod-;
int re=;
for(;y;y>>=,x=1ll*x*x%mod)if(y&)re=1ll*re*x%mod;
return re;
}
void push(char x){
if(pp==ps+)fwrite(ps,,,stdout),pp=ps;
*pp++=x;
}
void write(int x){
static int top,sta[];
if(!x){push(''),push('\n');return;}
while(x)sta[++top]=x%,x/=;
while(top)push(sta[top--]^'');
push('\n');
}
void flush(){fwrite(ps,,pp-ps,stdout);}
namespace poly{
int g=,iv[N],rev[N],L;
void init(int l){for(int i=;i<=l;++i)iv[i]=pw(i,mod-);}
void cls(int*A,int l,int r){for(int i=l;i<r;++i)A[i]=;}
void cpy(int*A,int*B,int l){for(int i=;i<l;++i)A[i]=B[i];}
void der(int*A,int l){Run(i,,l-)A[i]=1ll*(i+)*A[i+]%mod;A[l-]=;}
void dif(int*A,int l){Don(i,l-,)A[i]=1ll*iv[i]*A[i-]%mod;A[]=;}
void ntt(int*A,int l,int f){
for(L=;(<<L)<l;++L);
for(int i=;i<l;++i){
rev[i]=(rev[i>>]>>)|((i&)<<(L-));
if(i<rev[i])swap(A[i],A[rev[i]]);
}
for(int i=;i<l;i<<=){
int wn=pw(g,f*(mod-)/(i<<));
for(int j=;j<l;j+=i<<){
int w=;
for(int k=;k<i;++k,w=1ll*w*wn%mod){
int x=A[j+k],y=1ll*w*A[j+k+i]%mod;
A[j+k]=(x+y)%mod,A[j+k+i]=(x-y+mod)%mod;
}
}
}
if(!~f){for(int i=;i<l;++i)A[i]=1ll*A[i]*iv[l]%mod;}
}
void inv(int*A,int*B,int l){
static int t[N];
if(l==){B[]=pw(A[],mod-);return;}
int len=l<<;
inv(A,B,l>>);cls(B,l,len);
cpy(t,A,l);cls(t,l,len);
ntt(t,len,);ntt(B,len,);
for(int i=;i<len;++i)B[i]=1ll*B[i]*(-1ll*t[i]*B[i]%mod+mod)%mod;
ntt(B,len,-);cls(B,l,len);
}
void ln(int*A,int*B,int l){
static int t[N];
int len=l<<;
inv(A,B,l);
cpy(t,A,l);cls(t,l,len);
der(t,l);
ntt(B,len,);ntt(t,len,);
for(int i=;i<len;++i)B[i]=1ll*B[i]*t[i]%mod;
ntt(B,len,-);cls(B,l,len);
dif(B,l);
}
void exp(int*A,int*B,int l){
static int t[N];
if(l==){B[]=;return;}
int len=l<<;
exp(A,B,l>>);cls(B,l,len);
ln(B,t,l);
for(int i=;i<l;++i)t[i]=(A[i]-t[i]+mod)%mod;
t[]++;
ntt(B,len,);ntt(t,len,);
for(int i=;i<len;++i)B[i]=1ll*B[i]*t[i]%mod;
ntt(B,len,-);cls(B,l,len);
}
void solve(int*A,int l){
static int t[N],r[N];
if(l==){A[]=;return;}
int len=l<<;
solve(A,l>>);cls(A,l,len);
cpy(t,a,l);cls(t,l,len);
ntt(A,len,);ntt(t,len,);
for(int i=;i<len;++i){
int tmp=A[i];
A[i]=(mod-1ll*iv[]*t[i]%mod*A[i]%mod*A[i]%mod)%mod;
t[i]=(mod-1ll*t[i]*tmp%mod)%mod;
}
ntt(A,len,-);cls(A,l,len);A[]++;
ntt(t,len,-);cls(t,l,len);dif(t,l);
exp(t,r,l);inv(r,t,l);
ntt(A,len,);ntt(r,len,);
for(int i=;i<len;++i)A[i]=1ll*A[i]*r[i]%mod;
ntt(A,len,-);cls(A,l,len);
dif(A,l);
ntt(A,len,);ntt(t,len,);
for(int i=;i<len;++i)A[i]=1ll*A[i]*t[i]%mod;
ntt(A,len,-);cls(A,l,len);
}
}
int main(){
// freopen("uoj50.in","r",stdin);
// freopen("uoj50.out","w",stdout);
scanf("%d%s",&n,s+);
for(int i=fac[]=;i<=n;++i){
fac[i]=1ll*fac[i-]*i%mod;
if(s[i]-'')a[i-]=pw(fac[i-],mod-);
}
int len=;for(;len<=n;len<<=);
poly::init(len<<);
poly::solve(ans,len);
for(int i=;i<=n;++i)write(1ll*ans[i]*fac[i]%mod);
flush();
return ;
}

uoj50【UR#3】链式反应的更多相关文章

  1. 【UOJ#50】【UR #3】链式反应(分治FFT,动态规划)

    [UOJ#50][UR #3]链式反应(分治FFT,动态规划) 题面 UOJ 题解 首先把题目意思捋一捋,大概就是有\(n\)个节点的一棵树,父亲的编号大于儿子. 满足一个点的儿子有\(2+c\)个, ...

  2. 【UR #3】链式反应

    http://uoj.ac/problem/50 %炮姐 好博客 树形结构 枚举根节点的儿子是哪两个 然后列出方程: 然后有EGF的影子! 倍增? 泰勒展开可以把未知数从函数里拿出来!并且变成1次项, ...

  3. [UOJ50]链式反应

    这个题意说人话就是:一棵带标号的有根树,编号满足堆性质,根节点有$x$个儿子是叶子($x\in A$),另外的$2$个儿子也是这样的一棵树,求不同的树的个数 设$f_n$为答案,枚举那两棵子树的大小$ ...

  4. ur c题练习

    ur的c果然sxbk啊 ur5:“三个莫比乌斯反演掷地有声"——摘自v(c)f(z)k(y)语录,无删改 ur2:有根树分治裸题,复杂度玄学$O(n\sqrt{n})$. 首先,转化为统计k ...

  5. db2 with ur

    这几天查询DB2数据库,老遇到select * from XXX with ur, 好奇ur是什么作用,现在记录一下. DB2中,共有四种隔离级:RS,RR,CS,UR,DB2提供了这4种不同的保护级 ...

  6. 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块

    #33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...

  7. uoj #118. 【UR #8】赴京赶考 水题

    #118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...

  8. uoj #31. 【UR #2】猪猪侠再战括号序列 贪心

    #31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...

  9. UR #13 Yist

    第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...

随机推荐

  1. kubernetes dashboard 安装时出现9090: getsockopt: connection refused错误

    转载于:https://blog.csdn.net/lucy06/article/details/79082302 安装kubernetes  dashboard时,出现错误: Error: 'dia ...

  2. 10款常见MySQL高可用方案选型解读

    一.概述 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. ...

  3. iOS开发学习-类似微信聊天消息中的电话号码点击保存到通讯录中的功能

    类似微信聊天消息中的电话号码点击保存到通讯录中的功能,ABAddress的实现在iOS9中是不能正常使用的,点击完成后,手机会非常的卡,iOS9之后需要使用Contact新提供的方法来实现该功能.快捷 ...

  4. Chapter 10 软件测试

    软件测试是软件质量保证的一项关键活动,验证与确认是贯穿软件生命周期的规范化评估方法.软件验证则试图证明在软件生存的各个阶段是否满足客户的需求,软件确认是一系列的活动和过程,两个活动相互独立但却相辅相成 ...

  5. 《 Spring1之第二次站立会议(重发)》

    < 第二次站立会议(重发)> 昨天,我把找到的代码和协议资料等相关资料在团队里做了相应的汇报: 今天,我对自己找到的代码进行了相关的了解后,把它们在编译环境中进行了编译以及接着对代码进行逐 ...

  6. ListViewAnimations使用时报错NoClassDefFoundError: com.nineoldandroids.animation.Animator

    见 https://github.com/nhaarman/ListViewAnimations/issues/294 解决: Add this to your dependencies in you ...

  7. 剑指offer :从尾到头打印链表

    题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路: 链表的遍历只能从头向尾进行,要从尾到头输出,考虑用栈.先从头到尾遍历一次链表,同时将值进栈,再清空栈,同时将值 ...

  8. HTML和CSS <h1> --2-- <h1>

    认识html文件基本结构 这一节中我们来学习html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> <bo ...

  9. “吃神么,买神么”的第一个Sprint计划(第六天)

    “吃神么,买神么”项目Sprint计划 ——5.26  星期二(第六天)立会内容与进度 摘要:logo最终出来了,,背景也出来了,可以开始将完成的部分放到同一个文件中,决定剩下的时间把昨晚的部分贴上去 ...

  10. BETA-5

    前言 我们居然又冲刺了·五 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 前一份代码方案全部垮掉,我,重构啦 接下来的计划 加速加速,一定要完成速度模块 ...