GDKOI总结

day1
先看A,是我经常失手的构造题。
显然有50分做法。
但是100分想了好久都没有思路。
尝试dfs树,dp,贪心,数学归纳均失败。
写了个随机化。
再看B,发现是个简单题。
但是忘记了二分后结果的本质。
所以跳过去了。
再看C,显然有30分暴力。
想了一会想到李超树,分治,但是思路并不是很清楚。
再看D
什么?计数题?
根据以往的经验,GDOI系列比赛放在最后一题的的计数题都不太可做。
只能写暴力。
显然也有30分暴力。
回头想A想了很久还是不会。
最后无奈把随机化和一个猜想合并取最优解。
然而最后发现A的随机化时间复杂度是正确的。。。。。
本来我至少会100+100+30(+70)+30,但是因为自己的考试策略错误导致没时间写。。。。。。
总结:
写随机化后没有仔细思考算法正确性,导致浪费了非常多时间。
D题命中了我的知识盲点,认了。。。。。
题解:
A:标算做法:从1~n考虑数,每次把(i)贪心放在令答案最小的集合中。
我的做法:每次为每个节点随机二分图的一边,然后计算是否符合要求。
可以证明期望随机2次就能得到答案。
B:考虑建立笛卡尔树/使用单调栈。
找到每个位置第一个左边大于它的(l_i),第一个右边大于它的(r_i)
显然我们以这个点为中心的合法区间,开头必须在((l_i,i]),结尾必须在([i,r_i))中。
一个点的贡献是一个分段函数。
它由三条斜率分别为(1,0,-1)的直线组成。
考虑二分。显然一个点对答案的贡献可以在(O(1))的时间内计算。
这样子我们二分出了(l)处的值(v)
二分完以后,我们就能得知(l)处的值的选择方案。
考虑我们每次取出最小的,然后把这个权值多选择一个再插入堆中。
时间复杂度(O(nlog_2l+(r-l+1)log_2n))
C:(O(n^2))暴力:考虑manacher,把串交替插入(#)后,求出以每个元素为中点的串延伸长度的最大值。
记二元组((i,p))表示中点为(i)的串,最多往左/右延伸(p)
询问时枚举每个二元组计算答案。
考虑二分。
我们要计算(pgeq md)的二元组是否符合要求。
只需判定一个区间([l+md,r-md])的二元组的最小(p)值是否(geq md)即可。
day2:
看A,什么?期望?
搞了我两个小时,心态爆炸。
再看B,显然有40分暴力。
想了一会只会40分。
然后突然发现在线段树上把区间(min(a_i,i) o i-1)加1后就变成了简单的线段树上二分出第一个0的位置。
天啊!这种SB题居然想这么久!
写完拍过后考试只剩1h了。
接下来写了C的特殊性质。
看出C的正解没时间写了。
看榜,发现真的凉了,A,B都写挂。。。。。
day3:
考前有一股预感觉得今天的题目有点难。
结果确实有点难。
看A,发现是个简单题。
然而一开始走偏了。
一直想用LCT维护,发现不对后想大于转等于容斥。
白写了3k代码
到想到正解(大于转等于容斥+点减边)以后已经1h+了。
写到2h还是没有调出来。。。。。
写了B,C暴力,D也想到了40分暴力。
回头写A的(O(n^2*5)),发现原来的思路假了。
发现自己的做法假了,推了公式结果没推出来。
改到最后都没改完。。。。。。
实际上,今天的题目非常难。
应该死磕一道题的。。。。。

原文地址:https://www.cnblogs.com/ctmlpfs/p/14344219.html