2023.4.20 nfls集训Day4总结
1.时间安排
7:50~9:00
T1是简单计数题,特判通过(0,0)构成的直角三角形,再算一遍两个相似三角形拼起来的大概就行了。
T2 Larunatrecy讲过类似结论的东西,感觉给每种颜色随机赋一个小权值跑状压DP就是对的。
T3是字符串科技,送了70分。
T4也是计数,但是是计算图形数量的,数据范围很大可能要拉插。
先把T1切了,因为一些细节问题和复杂度计算问题出了差错交了很多发,最后也不会算复杂度,只能大概感觉出是 \(O(n\sqrt n)\) 级别的东西,反正能过(
9:00~10:30
先写了T2的状压,发现居然不对,过一会看到公告数据锅了,暂时放着看T3。
光速写了T3的 \(n^3\) 暴力,枚举分界点暴力lcs,70pts。
感觉没法上串串科技,于是写了一写乱搞,比如随机分若干块跑三分,但是子任务捆绑根本过不去最后一个包。
然后把T2的随机化+状压DP写了,修了第一版的数据能过50分,反馈还是有问题,继续等。
10:30~11:00
听到数据修好了,调了调参数过了T2。
感觉T3没什么发挥空间,想T4。
11:00~12:50
发现每个三角形都可以用一个六边形来描述,六边形两组三个不相邻的边长度相等,枚举这两个长度,注意不能同时为0,都不为0的时候可以对应两个三角形,可以做到 \(Tn^4\),能过10分。
打表出来,发现这东西是一个前后缀拼起来的东西,推一推式子就可以做到 \(O(T(r-l+1)^2)\),可以过40。
感觉这东西能拉插,但是要分段拉插还要分讨,无论如何最后一部分的推式子是究极恶心的,抱着上午写不出来下午还要补题但是下午不想补的念头硬是推了三页演草纸,推出来了 \(O(1)\) 的东西(虽然其实是十几个式子),还好没有地方推挂,一遍过了。
result:
T1:100 T2:100 T3:70 T4:100
2.总结
Div1T1(Div2T3):
bitset科技题,虽然有老哥用 \(n^2\) 艹标算了,但是需要矩乘相关的科技就先不研究了。
观察到lcs的DP数组差分后只含01,于是bitset优化即可,复杂度 \(O(\frac{n^3}{w})\)。
具体的推导过程参考这篇博客,相当逆天的。
Div1T3:
一眼博弈论,倒序拓扑排序更新每个节点的sg值,注意到最后是形如有若干个数找到不能通过异或得到的最小值,这个东西直接线性基就好(前提是可以选空集,否则0要特殊处理),注意到每个点的sg值一定是形如 \(2^k\) 的形式,所以sg函数值域是 \(2^n\) 的,用bitset维护线性基就好。
至于怎么找到线性基无法表达的最小值,如果是空就是0,否则就找到最小的线性无关的位(就是线性基中没有赋值的位)\(t\),答案就是 \(2^t\),证明就考虑任意一个更小的数一定能被线性基表达,这是线性基的定义,当然这个东西的前提是可以选空集,否则就很难做了。
Div1T4:
弱化版是AGC006D,这题直接套用结论计数就好。
原题结论是找到距离中心最近的一个或两个连续段,如果至少有一个值全0则中间的会变成0,证明参考这题的题解。
那么就直接枚举这个段在哪里就好了,枚举的形式就大概是枚举从中间开始01交替段向两侧延伸多长,并要求两侧最终延伸到0,之后选择继续延伸一边1个0或两边各一个0,复杂度 \(O(n)\),非常好写。

浙公网安备 33010602011771号