冬令营的各式各样的总结

2022.1.18总结

T1:一道数学思维题,想了一个上午,发现nn特别小,二分答案后寻找以各顶点为圆心,二分出来的答案为半径,交于多边形的边的扇形,讨论一下交点数,用相似求出交点坐标,用一些奇妙的算法(叉积或者暴力)求出面积判断交点是否在多边形以内,就可以了;考场上,有一种情况没讨论对,当交点数为0时应该把交点当成扇形与两边的交点

T2:不会

T3:3030'暴力BFSBFS,但是考试的时候没注意到它可以移到哪里,挂0,6060'二维前缀和,二维差分,100100'用二维字符串通配,FFTFFT优化,但是我没学

T4:用前缀异或和来求解

2022.1.19总结

T1:一道记忆化搜索,两个dfsdfs轮流跳,根据最优策略,状态压缩即可。考场时以为是求DD的最大值,所以炸零了

T2:又是一道数学思维题,观察可以发现n104n \le 10^4,因此n2n^2的算法理论上也是能过的。对一个点,若它与其他点围成了一个凸包,那么一定有一条经过它的直线使得所有的点都在它的一侧。那么作每个点与AA城的直线,暴力判断左右点数,(也可以排序后nlognn \log n判断),找出最小值;还有要特判一下xi=xAx_i = x_A的情况,因为此时kk值为无穷大,于是乎我考场切掉了

T3:打的是暴力,但是有些地方挂掉了,于是又炸零了,题目看得还不够仔细,正解是二分图匹配,把剑与法术连一条小怪的边,跑一个KMKM算法或者转化成费用流模型做一遍网络流DinicDinic

T4:暴力n3m3n^3 m^3优化一下可以卡过去,正解是n2m2n^2 m^2的,设fi,j,kf_{i,j,k} 表示当前在点iijj,模值为kk,由此可以列出dpdp

2022.1.20总结

T1:一道dpdp题,考场时以为复杂度太高,所以没怎么打。正解是设fif_igig_i表示以左边或者右边的点为结尾的最大值,可以列出一个状态转移方程,对边集进行排序,发现n104n \le 10^4,所以说n2lognn^2 \log n也是可以稍稍卡过去的

T2:又是一道网络流,DinicDinic学得不怎么样,以后还是得要过基础先

T3:线段树优化,暴力删点,用线段树维护区间最小最大值,单点修改,当然也可以用setset来存储当前还剩余的点,以后读题要读详细点,居然漏看了一个关键性句子:

它将炸毁坐标在[Yi-Bi,Yi+Bi]范围中所有DkAiD_k \le A_i的尚未被炸毁的德军阵地。而同时对其他针对不造成任何影响

所以以后要仔细读题,不要挂掉能拿分的题(永远都猜不到出题人的数据是有多么)!

T4:没有考虑到几个矩形重叠在一起的情况(考虑了也不会做呵呵呵)

2022.1.21总结

dpdp专题了属于是……

T1:双向BFSBFS,暴搜,再稍稍优化一下常数,赛时打的是单向BFSBFS,所以TLETLE成了5050'UpdUpd:空间开的也太小了,十分辛苦地把代码运行空间从80000KB80000KB压成20000KB20000KB,全场最·毒·瘤的题目

T2:二分,用dpdpcheckcheck,由题知,每一个塔只对一个区间产生贡献,且每一个塔的高度不同,于是可以按从高到低的顺序进行dpdp,这样子就没有了后效性。

T3:正解是一个区间dpdp,设fi,j,0/1f_{i,j,0/1}表示当前在iii+1i+1之间,上次的运算符出现在jjj+1j+1之间,0/10/1表示当前选择++或者×\times。由此可以列出dpdp式,但是也可以使用暴力dfsdfs剪剪枝,不仅思路简单,码量小,而且空间小,还跑得飞快(154ms154ms308KB308KB553bytes553bytes)。考场的时候用了BFSBFS,导致有一个问题,若选择添加符号,对答案产生11的贡献,否则没有贡献,这样就不保证队列中相连的一段产生贡献相同,还有若当前和与积之和超过了TT,答案还是要保留,有可能后面*了一个00,刚好卡过去

T4:缩点,将一个环缩成一个点,再愉快地dpdp

2022.1.22总结

T1:通过循环节来寻找规律,显然vi[m,m]v_i \in [-m,m],因此循环节最长为MM,那我们只需要考虑前K+2MK+2Mviv_i就可以了,复杂度为O(30002)O(3000^2),跑得飞快15ms15ms话说我居然真的以为它给出来的viv_i是随机数……

T2:双向BFSBFS暴搜,优化常数,考场的时候队列开太大了,导致MLEMLE9090'(主要是用了mapmap不知道会消耗多少空间)。从起点和终点两点同时出发进行搜索。

T3:网络流,给矩阵进行黑白染色之后建立二元关系网络流模型,然后使用DinicDinic进行最小割

T4:呃呃呃暂时还不会