[hdu7085]Pty loves SegmentTree
简单分析,不难得到以下转移——
$$
f_{n}=\begin{cases}1&(n=1)\\B\sum_{i=1}^{n-1}f_{i}f_{n-i}&(n\le k)\\B\sum_{i=1}^{n-1}f_{i}f_{n-i}+(A-B)f_{k}f_{n-k}&(n>k)\end{cases}
$$
(在$n<k$时,该式子即类似于为卡特兰数的递推式)
考虑生成函数,令$F(x)=\sum_{n\ge 1}f_{n}x^{n}$,那么即
$$
F(x)=B\cdot F^{2}(x)+(A-B)f_{k}x^{k}F(x)+x
$$
记$C=(A-B)f_{k}$,代入求根公式即
$$
F(x)=\frac{-(Cx^{k}-1)\pm\sqrt{(Cx^{k}-1)^{2}-4Bx}}{2B}
$$
显然$F(0)=0$,那么代入即得到应取负号
令$Q^{2}(x)=(Cx^{k}-1)^{2}-4Bx$,将上式化简并整理即$Q(x)=1-2BF(x)-Cx^{k}$
将两边同时求导,即$Q'(x)=-2BF'(x)-Ckx^{k-1}$
注意到$2Q'(x)Q^{2}(x)=Q(x)(Q^{2}(x))'$,将每一项分别代入,两式即分别为
$$
-2\left(2BF'(x)+Ckx^{k-1}\right)\left((Cx^{k}-1)^{2}-4Bx\right)\\\left(1-2BF(x)-Cx^{k}\right)\left(2C^{2}kx^{2k-1}-2Ckx^{k-1}-4B\right)
$$
将两者展开后整理,即
$$
\left(C^{2}kx^{2k-1}-Ckx^{k-1}-2B\right)F(x)-\left(C^{2}x^{2k}-2Cx^{k}-4Bx+1\right)F'(x)+\left(2Ckx^{k}-Cx^{k}+1\right)=0
$$
考虑上式的$n-1$次项系数并整理,即
$$
f_{n}=\frac{2B(2n-3)f_{n-1}+C(2n-3k)f_{n-k}-C^{2}(n-3k)f_{n-2k}+[n=k+1]C(2k-1)}{n}
$$
为了方便,约定$\forall n\le 0,f_{n}=0$,由此直接递推即可(注意到在$n<k$时不需要$C$)
由此,即可线性预处理出所有$f_{i}$,进而前缀和即可快速查询
总时间复杂度为$o(n+q)$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10000005
4 #define mod 998244353
5 #define ll long long
6 int t,q,k,A,B,C,l,r,inv[N],f[N],sum[N];
7 int main(){
8 inv[0]=inv[1]=1;
9 for(int i=2;i<N;i++)inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
10 scanf("%d",&t);
11 while (t--){
12 scanf("%d%d%d%d",&q,&k,&A,&B);
13 for(int i=1;i<N;i++){
14 if (i==1)f[1]=1;
15 else{
16 f[i]=2LL*B*(2*i-3)%mod*f[i-1]%mod;
17 if (i>k)f[i]=(f[i]+(ll)C*(2*i-3*k+mod)%mod*f[i-k])%mod;
18 if (i>2*k)f[i]=(f[i]-(ll)C*C%mod*(i-3*k+mod)%mod*f[i-2*k]%mod+mod)%mod;
19 if (i==k+1)f[i]=(f[i]+(ll)C*(2*k-1))%mod;
20 f[i]=(ll)f[i]*inv[i]%mod;
21 }
22 if (i==k)C=(ll)(A-B+mod)*f[i]%mod;
23 }
24 for(int i=1;i<N;i++)sum[i]=(sum[i-1]+(ll)f[i]*f[i])%mod;
25 for(int i=1;i<=q;i++){
26 scanf("%d%d",&l,&r);
27 printf("%d\n",(sum[r]-sum[l-1]+mod)%mod);
28 }
29 }
30 return 0;
31 }
[hdu7085]Pty loves SegmentTree的更多相关文章
- [hdu7081]Pty loves book
建立ac自动机,令$S_{x}$为以根到$x$的路径所构成的字符串以及$L_{x}=|S_{x}|,W_{x}=\sum_{1\le i\le m,t_{i}为S_{x}的后缀}w_{i}$,那么不难 ...
- [hdu7082]Pty loves lcm
先将问题差分,即仅考虑上限$R$(和$L-1$) 注意到$f(x,y)$增长是较快的,对其分类讨论: 1.若$y\ge x+2$,此时满足$f(x,y)\le 10^{18}$的$(x,y)$只有约$ ...
- Microsoft Loves Linux
微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...
- 5806 NanoApe Loves Sequence Ⅱ(尺取法)
传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K ...
- 5805 NanoApe Loves Sequence(想法题)
传送门 NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K ( ...
- CF444C. DZY Loves Colors[线段树 区间]
C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces444C DZY Loves Colors(线段树)
题目 Source http://codeforces.com/problemset/problem/444/C Description DZY loves colors, and he enjoys ...
- CodeForces445A DZY Loves Chessboard
A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...
- BestCoder Round #90 A.Kblack loves flag(随机数生成种子)
A.Kblack loves flag [题目链接]A.Kblack loves flag [题目类型]水题 &题意: kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜. 某天,k ...
随机推荐
- 残差网络resnet理解与pytorch代码实现
写在前面 深度残差网络(Deep residual network, ResNet)自提出起,一次次刷新CNN模型在ImageNet中的成绩,解决了CNN模型难训练的问题.何凯明大神的工作令人佩服 ...
- Linux7安装redis6
首先下载软件包并解压 cd /opt wget https://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5. ...
- ubuntu20.04安装网易云音乐
Ubuntu20.04安装网易云 进入网易云音乐下载地址 下载对应客户端 进入终端,安装 sudo dpkg -i 软件名.deb
- 查询windows日志
系统日志可以用来查看系统的一些信息,比如警告.错误.验证.开关机等. 打开系统日志 按下快捷键win+R,输入eventvwr.exe,并点击确定 查询开关机记录 点击左侧Windows日志-> ...
- 试题 算法训练 二进制数数 java解题
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定L,R.统计[L,R]区间内的所有数在二进制下包含的"1"的个数之和. 如5的二进制为101,包含2个&q ...
- Spirit带你了解如何安全引入第三方资源
Spirit带你了解如何安全的引入第三方资源 本文介绍一下如何安全的引入第三方资源 同源策略(SOP) 首先我们来了解一下什么是同源策略,下面的是wiki百科的定义 同源策略是指Web浏览器中,允许某 ...
- 什么是js事件,冒泡机制,事件捕获,默认行为
js事件: javascript使我们能够有能力创建动态页面,事件就是可以被js侦测到的行为,网页中每个元素都可以产生某些触发js函数的事件. 例如我们可以在用户点击某个按钮时产生一个click事件来 ...
- Less-25 preg_replace2
Less-25: 核心语句: 各种回显也均有. 通过blacklist,我们可以发现,本题屏蔽了and和or. preg_replace函数中正则表达式后面的i是一个修饰符,代表正则匹配时不区分大小写 ...
- Go语言核心36讲(Go语言进阶技术六)--学习笔记
12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中, ...
- better-scroll快速上手及封装(vue项目)
愿你有诗有梦,有坦荡荡的远方 本文声明:这是一篇学习coderwhy老师的vue2课程的一个笔记,所以本文章是在vue项目中实现,没学过vue的大佬们可以举一反三. 使用场景及介绍 BetterScr ...