ICPC 2022 KM 补题
先说三道概率相关的题
B
首先是判断每个子集是否覆盖了整个矩形,离散化后暴力做是 \(O(2^nT*400)\),会TLE。当时队友想了一个挺巧妙的容斥的做法,但写起来比较复杂。其实发现就是一个01取并集的过程,可以直接bitset优化掉32倍的常数就ok了!
然后是状态转移,其实是比较经典的问题:有向图第一次走到合法的点的期望。但当时沿用了从起点开始,记录概率和期望的思路,结果碰到了一些麻烦就没调出来(后来冷静想了一下应该还是可以做的)
但从终点(合法点)往前考虑就会方便很多:直接DP考虑每个点出发的期望,从后往前DP即可!
就是要跳出从起点往后做的思维,考虑起点第一次到合法状态的期望这个问题:发现起点的问题可以转化为第一步到达的点的问题,所以就直接把状态设计为该点出发第一次到合法状态的期望!
G
原本想的是考虑第i个数最后在位置j的期望,但这个转移会受其他数字的状态影响,并且不是独立的,难以转移!
这时候,其实也是计数问题的常用思路:微观地考虑对答案的贡献。在本题中,第i个数最后在位置j的贡献是j-1,而又难以直接计算这个,故考虑分解这j-1的贡献,发现就是对于每个其它的数,如果最终在i前面,就贡献1,这就把贡献的计算缩小到了两个数之间的关系。
而对于两个数,计算其中一个在另一个前面的概率是显然的(其它数的变动都没有影响,只考虑这两个数的变动)。
C
很有意思的题。
然后是两道思维难度不大,但容易被卡的题
陷入log做法就会被精度和常数反复折磨的F
这个时候就不要太纠结于原来的想法了,考虑一下性质:如果没有点数不小于2的限制,那么取绝对值最大的点即可;加上这个限制后,沿用取绝对值最大的点这个思路(即均摊之后一定不会更优),把两个点看做一个点,那么点数一定小于4,只可能是2或3,所以直接搜一遍即可。
需要精妙地规避精度问题的L
大部分的做法是,根据题意列出关于斜率的不等式,转化为二维偏序;
我是对夹角的范围进行了\([L,\pi)-(R,\pi)\)这样的容斥,就可以转化为两个向量的方向关系(向量积小于0),但这个做法因为只有一个方向的限制,没法保证\([0,\pi)\),所以还需要y的限制,还是二维偏序,就是少了个离散化。
主要的问题在于精度上!
对于容斥的做法而言,左右区间都是闭的,原本想的是用左闭减去右开,但这样计算闭区间的时候,共线的情况很难处理,原因在于:
1.判断共线的时候,eps很难设置。因为对于三角函数存储的误差难以估计,以及和坐标(x,y)相乘后,其误差会随着坐标的范围而改变,难以用常量来判断。
2.甚至对于开区间而言,我们对R加上一个微小量,还需要保证原本的共线情况不会被算到,即误差要大于eps,这就更加魔幻了。
然后想到把R加上一个微小量改成L减去一个微小量,计算开区间,这样可以规避上述问题;但对于R的开区间,要特别判断共线的情况,使其不计算到,这就还是有共线的问题。
在这个过程中各种调精度,正确率在20%到83%之间玄学横跳,就是真的会破防...
这时候冷静想一下,把R加上一个微小量保留,两边都是开区间且没有共线的情况,就完美地规避了共线的问题了!
对于这一类计算几何的精度问题,应该主要注意如何避免共线的判断,一般通过加减微小量改成开区间,同时可以避免共线的情况!
E——考察题目性质的字符串题
原本性质想偏了,以为是用SA+奇怪分讨,其实认真模一下样例画个图就会发现有问题...
对于每个询问,考虑用总的字符串数减去相同的字符串数。发现两个字符串相同的条件是:长度相同,且平移对应的两个区间相同;特殊地,我们考虑只平移一格的两个字符串,那么就要求平移对应的这两个字符相同;然后就发现区间相同就是由每个字符相同形成的,所以相当于每次平移对应的字符相同,所以计算两个区间之间对用相同的字符对数即可。对于多组询问,用莫队计算。
性质类的字符串题还是要多画图,多模样例!
浙公网安备 33010602011771号