时间安排
8:00–8:05 读题。
8:05–8:36 T1,n<=18状压。感觉可以DP。
8:36–9:00 T2,暴力。考虑对于每次操作实际上是将0,1移动,但是感觉一时半会想不到怎么维护,想到了可能也不好写就先弃了。
9:00–9:40 T3,n<=500 n^3可做。对n的奇偶分类讨论,枚举中位数。
9:40–11:00 T1,显然可以DP。把该枚举的都枚举的跟着感觉走就可以了。但是复杂度上界3e8左右,所以一直犹豫着没写,最后实在没啥可写了就试着交了一发,竟然过了,不可思议。加了几个减肢。对于二叉树的部分分感觉可以冲一冲,自己随的几个数据都能跑过。
11:00–12:20 T3,可以用前缀和优化到n^2。直觉感觉函数是个凸的,也许可以三分,随了几组数据发现是多峰的,就没往三分写。
赛后:
T1 二叉树没冲过取。T3 完美的n^2为什么会在n<=5000 T掉啊?莫名其妙挂掉20。
T3人均A掉又是怎么会事,都写的三分?为什么我打表打出的不是凸的???
话说自己T1头几发瞎剪的根本不对的肢竟然能过,T3一些人写的所谓 决策单调性+玄学扰动 的乱搞做法竟然能A掉,可见数据之水。
回顾&反思
T1:
很妙的一道题,容易想到朴素背包 DP,但是由于背包合并带 K 2 = 4 e 6 K^2=4e6 K2=4e6 的复杂度,非常劣。比赛的时候我一直在想怎么优化合并背包的过程,而题解则是抛弃了背包合并,因为每次单点插入是线性 O ( k ) O(k) O(k) 的,所以考虑维护公共背包,插入单点,那么就要求我们记录当前背包内部点选择的状态,由于对于一个点,相邻影响它的只有父亲,对于一个点的若干子树,不同子树之间不会互相影响,那么只用维护一条自上而下的链就可以了。为了保证链长,可以使用淀粉树或者树剖保证长度log,这样暴力状压链上点的选择时会消耗 O ( n ) O(n) O(n) 的复杂度总复杂度 O ( n 3 k ) O(n^3k) O(n3k)(跑不满),关键还是在于公用背包单点插入去掉了一个 K K K 。
这种降背包合并复杂度的套路以前见过么?好像没有吧。遇到树形背包也要往这方面想。这种问题要多分析性质,合并复杂度劣,单插复杂度低,点之间的关系有很好维护,可以考虑单插单体合并。
T2:
依旧是转化,操作可以看成01段移动,然后平衡树维护,特判各种边界情况。比赛的时候想到类似的了,但是不懂怎么维护。具体怎么做还没懂。
T3:
出题人对三分凸性的证明真的感性
题目本身来说:首先,我对奇数知道怎么做,主要被卡在偶数了,但分析可得偶数必然比奇数劣,所以只处理奇数就可以了。其二是函数凸不凸的问题,确实存在平的函数,这对三分很不友好,但是分析可得如果出现平的就说明找到了最大值,不会再有更优的可,所以根本不用管。
简而言之,我比赛上纠结各种东西自己绊着自己,结果经过分析后发现都不用管,不会影响答案,直接莽就完事了。感觉自己分析性质的能力还是不够,常常会被一些东西绊着,尤其是那些不优性的东西。需要做一些思维型的题目锻炼一下。