PKUWC/WC 2024 游记
\(Day\space 0\)
直接跳到正文部分。
\(Day\space 1\)
早上开营仪式,下午测试。
\(13:00\)
测试开始。
看 \(t1\),这是什么东西?神秘博弈论?
开头是 L 或结尾是 R 的可以直接排除,然后 RL 交替出现的序列也可以直接排除。
所以考虑所有连续段?把所有的连续段提出来之后,猜结论?是不是把连续段继续递归?
感觉很对但也不是很对的样子?不管了,先写吧。
写完以后发现所有结论均错误。这时有点慌了,先看 \(t2\)。
\(t2\) 一个非常暴力的思想似乎是直接枚举笛卡尔树,考虑到 \(n=14\) 时树的个数是 \(26\text{XXXX}\) 的,不管了,直接写吧。
枚举完后,考虑每个位置的贡献,是方程组,可以高斯消元。
当我写完代码调试时……????怎么还有自由元???好,写完 \(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\)。
\(t2\) 是一个奇怪的题目,感觉像 \(dp\),但是情况很复杂,写了个状压跑了。
\(t3\) 是一个比较常规的数据结构?先看没有弹栈操作的部分分,考虑分块,然后每个位置和块维护压栈和弹栈,这空间不会爆?不敢写,写了个主席树,发现调不出来,寄了。
第三档是吉司机,很久没写过了,完全不会写。
\(100+28+18=146\)
两天加起来刚好 \(250\),自闭了。
别人都比我高 \(100\) 分。
\(Day \space 3\)
不知道是不是前几天的伙食问题,早上起来胸口很难受,吐了。
一天都不想吃饭,没胃口,头很晕,很难受。
明天就 wc 了,不知道怎么办。
\(Day\space 4\)
早上舒服了。
今天报道 + 开幕式,我比较社恐,听说是住宿,比较紧张。
第一次见到 cjh 大神,有点尴尬。听说他们三个之前与其见过很多次
下午看他们打球,和一名陌生的外省同志一起打了一会儿羽毛球。
晚上是开幕式,我永远忘不了那一幕元神。
启动!
宿舍阳台很小,跟一张小床一样大(真的。洗手池更小,都不知道这里的学生是如何经受如此虐待的。
晚上可以无限制筹集,很爽。
\(Day \space 5/6\)
上午听讲座,下午听讲座,讲座内容非常逆天。简单来说是坐牢。
晚上颓废。
\(Day\space 7\)
\(\text{WC}\) 测试。
\(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\),那么最终的取值
若 \(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\)
坐牢。
想家了。
好想回佛山啊!