EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

P8958 「CGOI-3」残暴圣所

题目背景

终于打过春二心门的 ac 来到了春三,并决定预测一下残暴圣所(Ferocious Sanctuary)的难度。

题目描述

为了通关残暴圣所,ac 需要在接下来的 2n 个时刻进行 n 次操作。第 i 次操作需要在时刻 li 按下某个按键,此后一直按住这个按键,直到时刻 ri 松开它(li<ri)。在每个时刻,ac 要么按下一个按键,要么松开一个按键,但是可以同时按住多个按键。

i 次操作形成了一个操作区间 [li,ri],满足 li 严格递增。并且,由于残暴圣所的关卡设计,任意两个操作形成的操作区间之间,要么不交,要么包含。

ac 设计了 2n 个难度系数 a1,a2,,a2n。第 i 次操作的难度可以用 ali×ari 来评估,而通关残暴圣所的难度即为所有操作的难度之和。

然而,由于 ac 卡在了残暴圣所的第一面,所以他并不知道每个操作的操作区间。在给定 n{a} 的前提下,请你计算对于所有可能的情况,通关残暴圣所的难度之和,对 998244353 取模。

形式化题意

给定一个长为 2n 的数列 a1,a2,,a2n

定义“区间组”由 n 个区间组成,第 i 个区间为 [li,ri] (1li<ri2n),求所有满足下列条件的区间组的 i=1nali×ari 之和对 998244353 取模:

  1. l1,r1,l2,r2,,ln,rn1,2,,2n 的一个排列。
  2. 1i<nli<li+1
  3. i,j[li,ri][lj,rj]=[li,ri]\sube[lj,rj][lj,rj]\sube[li,ri]

输入格式

第一行一个整数 n,表示区间数。

第二行 2n 个整数 ai,含义如上所述。

输出格式

一行一个整数,表示答案对 998244353 取模的值。

输入输出样例 #1

输入 #1

1
2
2
114 514 1919 810

输出 #1

1
2691692

输入输出样例 #2

输入 #2

1
2
3
1 1 4 5 1 4

输出 #2

1
98

输入输出样例 #3

输入 #3

1
2
8
275272885 418731188 289662326 114331587 192436268 885936831 877490593 508774565 633402863 149033362 995239139 494498006 168828873 138947653 983144753 844326228

输出 #3

1
349824160

说明/提示

样例说明

对于样例 1,可能的两个操作区间只有两种情况:

  1. [1,2],[3,4],通关难度为 a1a2+a3a4=1612986
  2. [1,4],[2,3],通关难度为 a1a4+a2a3=1078706

难度之和为 1612986+1078706=2691692,对 998244353 取模后仍为 2691692

以下几种情况是不合法的:

  1. [3,4],[1,2],因为要求 li 严格递增,而 l1l2
  2. [1,1],[2,4],因为要求 li<ri,而 l1r1
  3. [1,3],[2,3],因为要求在每个时刻,要么按下一个按键,要么松开一个按键,而第三个时刻松开了两个按键,第四个时刻没有按下或松开任何一个按键。
  4. [1,3],[2,4],因为要求任意两个操作区间不交或包含,而这两个区间之间有交,并且没有包含关系。

数据范围

对于 10% 的数据,n15

对于 30% 的数据,n200

对于 50% 的数据,n3000

对于另 5% 的数据,ai=1

对于 100% 的数据,1n5×1050ai<998244353

题解

题面中对区间的各种限制,本质上就是合法括号序列。本题等价于求出所有括号序列中每对括号的权值之和。

对于括号 [l,r],显然只有 rl+1 为偶数的括号内才能出现合法的序列。考虑这对括号会在多少种括号序列中做贡献,方案数为括号内的方案数乘以序列删除区间 [l,r] 后的方案数。

ci 为卡特兰数的第 i 项,那么括号 [l,r] 的贡献次数为 crl12×c2nr+l12

考虑到 rl+1 必然为偶数,因此简单的方式是只枚举长度为偶数的括号 [2i1,2j][2i,2j+1]。我们可以得到以下式子,其中约定 b2ni+1=ai

i=1nj=in(a2i1×a2j+a2i×a2j+1)×cji×cnj+i1=t=1n1i=1nt(a2i1×a2(t+i)+a2i×a2(t+i)+1)×ct×cnt1=t=1n1ct×cnt1i=1nt(a2i1×a2(t+i)+a2i×a2(t+i)+1)=t=1n1ct×cnt1i=1nt(a2i1×b2n2(t+i)+1+a2i×b2n2(t+i))=t=1n1ct×cnt1i=1nt(a2i1×b2(nt)2i+1+a2i×b2(nt)2i)=t=1n1ct×cnt1i=12(nt)ai×b2(nt)i

构造多项式

A(x)=i2naixiB(x)=i2nbixif(x)=A(x)B(x)

则原式可转化为:

原式=t=1n1ct×cnt1i2(nt)ai×b2(nt)i=t=1n1ct×cnt1×[x2(nt)]f(x)

一次卷积即可。