2022.07.06 NOI模拟赛总结
1.时间安排
7:30~7:50 看题面
T1:图上问题,n很小,可能是网络流这类的,简单分析应该是个一般图匹配问题,感觉比较不可做。
T2:DP题,一眼50分,可能有决策单调性,但是要求区间逆序对不是很好做。
T3:乱搞题,随机生成点求任意一个叉积为给定值的点对,既然保证数据随机,算法存在即合理,大胆乱搞。
7:50~8:40
先写了T2的暴力,手构数据没问题。
然后先写了T3的spj,开始乱搞。
形如 \(x_i*x_j+y_i*y_j=k\) 的式子可以拆成固定其中一个下标的一次函数,比如 \(y_i=-\frac{x_j}{y_j}x_i+\frac{k}{y_j}\),因为保证点在第一象限,易知函数过一、二、四象限,所以有用的只有第一象限的那个三角形。
随机情况下三角形内的点很少,加个O2就能跑过了。
试着搞了一些半平面的东西优化,反而跑的更慢了,就没再研究。
8:40~10:00
想了很久T1的n=15暴力怎么写,不能像昨天那样半阶乘复杂度枚举,很难搞,而且黑白边交替也不好处理。
想到了9:20左右也没什么思路,先看第二个子任务,容易发现所有点都被标记的话贪心每次只选两个相邻的点方案一定不差。
但是有一些特殊情况,有的点只有一个相邻的点的时候,如果唯一相邻的点被其他点匹配了,这个点就孤立了,白白损失一个,而且显然可以调整使得方案更优。
手构了很多数据,认为每次贪心选度数为1的点就是对的,如果没有的话这个连通块总能找到两两匹配的方案,用set维护贪心即可。
10:00~11:00
打了个T2的转移点表,果然有决策单调性,但是还是不能处理区间逆序对。
想了很多避开区间逆序对的方法,但是逆序对不能用前缀表示所以根本找不到这样的方法,寄。
11:00~12:00
回头突然想到可以拆点跑费用流,但是问题来到了怎么建图。
黑白边可以拆两倍点解决,每个点只能用一次可以再拆一倍解决,问题在于怎么连源汇点。
n只有15,直接状压哪些连源点,哪些连汇点即可。
实现的话需要再拆两个出来,每个点拆6倍,就能跑费用流了。
极限在交卷前10分钟写出来调完,还好费用流写的熟练。
result:
T1:50 T2:50 T3:50
(本以为T1拿50分很多,结构就我一个?%%%J神225TQL暴切23,自己拿了rk2也不错)
2.总结
T1:
正解居然真的是一般图匹配,还是带权(这题zr居然三人场切,哦是rk1是dls那没事了)。
自己推出来的费用流的图和题解要匹配的图很接近,不错的进步。
带花树可以研究一下,带权带花树暂时先放放。
T2:
%J神场切
决策单调性+cdq好题。
场上一直陷入怎么分块求区间逆序对中(时代的眼泪害人不浅),寄了。
一道类似的题[CmdOI2019]任务分配问题,本题就是这道题改成了划分任意个区间,划分有代价。
内层还是用决策单调性解决,外层按套路cdq分治。
每次先把分治区间左边的递归求出来dp之后给右边做只考虑左边区间的决策单调性,所以答案要不断取min,再递归右边即可。
好题,同时复习了决策单调性和cdq。
同时这道题还用到了 \(nlogn\) 的莫队,因为分治只有log层,总长度为 \(nlogn\),且指针(应该)单调,感性可以证明,更精细的证明可以看上面链接cmd大佬的证明。
区间逆序对还有 \(O(n\sqrt nlogn)\) 的莫队做法,被分块完全整魔怔了,如果想到了莫队说不定能想到正解。
T3:
%J神场切
乱搞妙题。
考虑可以枚举 \(x_i, y_i, x_j\),那么 \(y_j\) 可以被唯一确定,复杂度《优化》到了 \(O(n^3)\)。
可以选一个三次幂为复杂度上界左右的质数(大概在300左右),把四个数映射到质数范围内,这样枚举的复杂度不会超时,接下来就是如何判定合法。
可以开二维的桶,记录映射后值为 \(x,y\) 的点有哪些。
因为神奇的结论,所以暴力在桶里面找复杂度正确。
实测质数小一点会更优,我选了211,平均用时700s左右,大概是因为暴力查找的复杂度是均摊的缘故,质数比较小的话降低了枚举的复杂度,似乎能平衡掉。

浙公网安备 33010602011771号