说在前面
由于我初赛太逊了,导致我今年没去S2。不过我在复赛过后还是看了卷子,以下内容大概都是在独立思考下想出来的。
T1
感觉这个题比排水系统/julian良心。
不难发现飞机肯定是优先排在前面,那么也就是说我们先求出来有无限多廊桥的情况,然后作前缀和即可,国内和国际单独做,最后枚举0~n作为国内廊桥个数取max。
那么无限多廊桥的情况怎么弄呢?一开始属实把我整不会了。后来想想,主要是解决几个东西:
1.找到最前面的空廊桥(查询)
2.进入空廊桥(单点加)
3.起飞(单点减)
不难发现直接一波线段树二分完事,不过目测码量有点大。
rush成功了,一遍过,3.14KB,不过普遍比其他做法慢3倍。哈哈。
T2
看到题目感觉挺震撼,什么东西啊。
后来仔细分析,注意到了(n le 500),确认是一个区间dp了应该。
一开始设(f[i,j])为总个数,但是发现对于()()()...()之类的东西会重很多,样例2过不去。
然后考虑(f[i,j])记录((...))类,然后(g[i,j])记录AB,ASB之类。
转移自推,这里讲一个东西,就是ASB的(mathcal{O}(n^3))优化
rush完了,3K+,震撼,不过有不少注释,删掉应该会小很多。
T3
还没想,看上去像一个比较思路清奇的题。
update:写完了,写了3.8K/xia
先来个简短题意:
给一个正整数(n(1 le n le 5 imes 10^5))和长度为(2n)的序列(a),(a)中(1sim n)每个数恰好出现2次。每次可以从(a)的开头(L)和结尾(R)取出一个数放到序列(b)的结尾。求能让(b)成为回文序列的操作序列,如果没有输出-1,如果有多种输出操作序列字典序最小的。
看上去第一眼不太会,那就先玩样例:
5
4 1 2 4 5 3 1 2 3 5
不难发现,我们把一个数放到(b)中时,它所对的那个相等的数的出现顺序也确定了。
设我们选了的数用<>表示,已经被确定的用()表示。
5
<4> 1 2 (4) 5 3 1 2 3 5
L
我们发现(4)必须是最后一个被点到,那么倒数第二个只能是2或5。发现5可以通过R点出来,而2不行,那就点5.
5
<4> 1 2 (4) (5) 3 1 2 3 <5>
LR
(5)必须是倒数第二个被点到,那么倒数第三个被点到的只能是2或3。发现3可以通过R点出来,而2不行,那就点3.
5
<4> 1 2 (4) (5) (3) 1 2 <3> <5>
LRR
5
<4> <1> 2 (4) (5) (3) (1) 2 <3> <5>
LRRL
此时我们发现既可以L又可以R,那为了字典序最小,肯定L优先。
5
<4> <1> <2> (4) (5) (3) (1) (2) <3> <5>
LRRLL
我们发现()区间是连续的,当它的长度到达n时,可以停止了。然后在将()序列处理一下即可。
第一步R的话同理的。
T4
不会,不做评价!