2022.06.14 NOI模拟赛总结
1.时间安排
7:30~8:00 看题面
T1:计数题,n很小,而且是有标号图计数类,可能需要n遍ntt这类的。有10分的暴力和30分状压。
T2:数据结构题,维护区间表达式求值,感觉很难做,有10分暴力和20分没有修改操作。
T3:一眼网络流,但是n有1e6,应该是dp这类的。有30分暴力dinic。还有10分特殊性质。
8:00~9:00
暴力:T1 10分暴力,T2 10分暴力,T3 40分dinic和特殊性质。
9:00~10:00
写T2 20分无修改。
细节比较多,调了很久。
之后想了一会只修改符号的分数,没什么思路。
10:00~11:00
想T1的状压分。
观察得到每个点只有一个入度和出度。
考虑求至少k个松针的方案数,然后容斥。
用三进制状压枚举每个点是否有松针/有左或右松针,其他点随便选,即阶乘。
用二项式反演合并即可。
复杂度 \(O(n3^n)\) 过不掉。
不过n只有15,大于13的打个表就好了。
之后想了一下 n=100 的部分分,没什么思路,这个做法也没法用多项式优化。
11:00~12:00
试着写T3的n=5000。
先试着写线段树优化建图,突然意识到线段树优化建图的前提是线段树上的边容量都是inf,假了。
然后模仿模拟费用流,写了一个很迫真的贪心模拟最大流,样例都过不去。
之后一直想怎么样让贪心更贪,一直想到结束。
result:
T1:30 T2:30 T3:40
2.反思
T1:
%学姐场切。
正解确实是二项式反演,松针的限制可以通过从小到大枚举来实现,求解dp[i][j][0/1][0/1]表示前i个点引出来j个松针[i是否被选][i+1是否被选],求出来至少k个松针后二项式反演即可。
这个dp确实没想到,dp出来就是板子了,不过思路已经很接近正解了。
jsy说15是留给 \(O(n2^n)\)的,而且他的状压做法给正解很大启发,我的状压状态设计还是不够好。
不过jsy说他还没想到怎么用多项式求(或许能加强?)。
T2:
码量超大的一道题,不过思维难度不算太大。
因为一直在忙T1给T2数据结构题的时间太少了,感觉可以拿更多的分(只有字符修改需要套个线段树再分类讨论,实现应该不难)。
一个显然结论没想到:长度为n的序列最多可以划分出 \(O(\sqrt n)\) 个长度不同的子段。
并且随机数据的前置知识也不会:珂朵莉树。知道可以维护连续区间求解的话对正解启发很大。
T3:
离60分差了最关键的一步转化。
模拟最大流不存在,但就本题来讲模拟最小割是存在的,又因为最大流-最小割定理,这两个问题是等价的,求解最小割就是本题答案。
知道模拟最小割后秒想出来 \(O(n^2)\) dp。
正解的贪心不是很好想,但是证明很显然:先假设都割给汇点,按照给定的数据计算推流的代价后从小到大排序,因为每次选一个点推流需要减去前面选过的点数 * c ,这东西显然是递减的,所以贪心正确。
(未来我一定要研究出模拟最大流)

浙公网安备 33010602011771号