PKUWC / NOIWC 2024
Sktn0089
·
·
个人记录
Day\space 0
直接跳到正文部分。
Day\space 1
早上开营仪式,下午测试。
13:00
测试开始。
看 t1,这是什么东西?神秘博弈论?
开头是 L 或结尾是 R 的可以直接排除,然后 RL 交替出现的序列也可以直接排除。
所以考虑所有连续段?把所有的连续段提出来之后,猜结论?是不是把连续段继续递归?
感觉很对但也不是很对的样子?不管了,先写吧。
写完以后发现所有结论均错误。这时有点慌了,先看 t2。
枚举完后,考虑每个位置的贡献,是方程组,可以高斯消元。
当我写完代码调试时……????怎么还有自由元???好,写完 $11pts$ 暴搜跑路。
这时候很慌,$t1$ 都还没过,还是选择看 $t3$。
$h\le 4$ 时点数不超过 $16$,直接枚举点集然后做个 $sos dp$ 可以做到 $O(2^{2^h}h)$,每次询问同样枚举点集,有 $20pts$。
然后……不会了!重新看 $t1$,先写了区间 dp 和优化,可以做到 $O(n^2)$,然后呢?
发呆看 $t1$ 看到测试结束。
$73+11+20=104
甚至不如去年。
别人的分数都很高,130 到 160 不等。
输了。
Day\space 2
仍然看 t1。
可以证明 4 必须直接贪心和 1,2,3 分别匹配,但是 3?
忘了写了什么代码,发现 3 不能直接和 2 匹配,想象 1 很多的时候 3 要和 1 匹配。
所以?怎么那么多情况啊!!!
先写了个 dp,记录 1,2,3 个数,做到 O(n^3)。
然后思考如何处理。发现两个 1 一起匹配的时候相当于一个 2,那么我们可以把若干对 1 转化为 2,此时 1,2 只剩下两种匹配情况了。
那么很好处理,这是一个单峰函数,可以二分。
调试……二分出问题了?原来这不是严格单峰,相邻两个数可以一样。
那么三分是可以的。不对啊?直接枚举不就行了???
于是 t1 做了 2h。
$t3$ 是一个比较常规的数据结构?先看没有弹栈操作的部分分,考虑分块,然后每个位置和块维护压栈和弹栈,这空间不会爆?不敢写,写了个主席树,发现调不出来,寄了。
第三档是吉司机,很久没写过了,完全不会写。
$100+28+18=146
两天加起来刚好 250,自闭了。
别人都比我高 100 分。
Day \space 3
不知道是不是前几天的伙食问题,早上起来胸口很难受,吐了。
一天都不想吃饭,没胃口,头很晕,很难受。
明天就 wc 了,不知道怎么办。
Day\space 4
早上舒服了。
今天报道 + 开幕式,我比较社恐,听说是住宿,比较紧张。
第一次见到 cjh 大神,有点尴尬。听说他们三个之前与其见过很多次
下午看他们打球,和一名陌生的外省同志一起打了一会儿羽毛球。
晚上是开幕式,我永远忘不了那一幕元神。
启动!
宿舍阳台很小,跟一张小床一样大(真的。洗手池更小,都不知道这里的学生是如何经受如此虐待的。
晚上可以无限制筹集,很爽。
Day \space 5/6
上午听讲座,下午听讲座,讲座内容非常逆天。简单来说是坐牢。
晚上颓废。
Day\space 7
$t1$ 是正版签到,不知道出题人在想什么,历年来第一次出橙 $t1$,只要会 $01$ 背包就会做。
$t2$ 是一个区间数数题。
当我们确定了每个数的操作方式(取反/不取反)后,其实就能确定 $2L$ 的取值范围了,并且范围是一个开区间。
合法的条件是这个范围有解。
枚举左端点,往右边扫右端点,考虑 $\text{DP}$。设 $f[j,0/1]$ 表示第 $j$ 个位置不取反/取反时区间 $[i,j]$ 合法的最小的 $2L$,$g[j,0/1]$ 则为最大。
然后直接转移做到 $O(n^2)$。
已经有 $44pts$,尝试看 $t3$。
一开始想了个假做法,考虑直接树形 $dp$,设 $f[u,0/1/2]$ 表示点 $u$ 考虑子树后,不确定/不因父亲确定/因父亲确定的方案树。
然后过不了大样例,发现一个区间的和不一定必须知道其在线段树上的点的值,而是可以通过各种容斥求得。考虑容斥本质是前缀和相减,确定一个线段树上的点 $[l,r)$ 相当于把 $l,r$ 两点合并,计算满足有 $m$ 对点,每对点连通的方案数。
然后发现这个假做法其实就是特殊性质的做法。
正解看起来无从下手。
思考片刻后还是看回 $t2$。区间个数似乎可以双指针,但是难以 check,这个 dp 似乎能用矩阵乘法的形式表示?转移都是 chkmin 和 chkmax 的形式,考虑这种形式有什么特点。
如果一个数通过一系列 chkmin/chkmax,结果如何?设这些操作中 chkmin 的最小值为 $y$,chkmax 的最大值为 $x$,若 $x\le y$,那么最终的取值
$$
v_1= \begin{cases}
x & v_0<x \\
v_0 & x\le v_0\le y \\
y & v_0>y
\end{cases}
$$
若 $x>y$,那么最终取值唯一。用一个二元组 $(x,y)$ 表示这样的一个操作过程,若 $x\not =-1$ 则 $x,y$ 与上述含义相同;若 $x=-1$,则最终取值唯一,为 $y$。两个二元组可以合并,也可以取 $\min /\max$,因此直接用矩阵乘法优化就行。
双指针还要套一个线段树,不如直接分治,每次从 $mid$ 往两边扫,维护一边的矩阵乘积,然后双指针维护即可,$O(n\log n)$,常数比较大。
把 $\min /\max$ 宏优化后极限数据能跑 $1s$ 了。
看 $t3$,尝试写一下 $M=1$ 的做法。
分类讨论,根据区间内关键点数量 $0/1/2$ 来分别 dp,但是状态多,细节多,分讨量大,直接放弃。
剩下 $20min$ 基本发呆了。
下午看成绩,左边的 fxt 大神直接暴砍 $265pts$,orz。
$100+100+25=225$,应该……有银了吧?
实话说 $t3$ 这个部分分真的比较差,讲评说 $M=1$ 直接做,但具体仍然不知道如何 dp,然后说 $M\le 5$ 的时候状压就行。
但我仍然不知道怎么 dp。
考都考完了,可以放心颓废了!
乒乓打得挺爽,下次还要!
## $Day\space 8
坐牢。
想家了。
好想回佛山啊!