前言:这次比赛打的不是很好,100pts,rank8
T1
赛时想到了正解,但是因为一些题面的原因和代码细节没调出来
首先可以写出暴力dp:\(f[i][j]\)表示到第i位,选了i且选了j个哨岗的最大范围
枚举k为上一个,直接暴力转移是\(O(n^3)\)的,过不去
然后,我们发现可以分类讨论,如果\([l_i,r_i]\)和\([l_k,r_k]\)没有交集,就可以直接加上区间长度,把每一个r插入vector,在枚举i的时候动态更新这颗线段树
如果被包含,那么就不会优,不会对答案做出贡献,不用管
如果有交集,那么加上i的贡献就是\(r_i-r_k\),发现可以对于每一个位置把\(r_k\)减去,然后就与位置无关了,直接线段树维护
开1000棵线段树即可
T2
有点小抽象的
首先我们要确定多边形的点的顺序,把y值最小的同时x值最小的点求出,然后用\(atan2(y,x)\)极角排序,作用就是求\((x,y)\)与原点的连线与x轴正半轴的夹角
然后考虑区间dp,因为平均数是固定的,n,根号也是固定的,所以只用分别对一段区间考虑
\(f[i][j]\)表示i号点到j号点的最小方差
转移时,枚举一个k,将\(f[i][j]\)和\(f[i][k]+f[k][j]+getans(i,j,k)\)比较大小,\(getans(i,j,k)\)就是这三个位置组成的三角形的贡献,这是可以直接累加的,要加这个是因为两个区间合并少了这个三角形,所以加上即可
T3
个人感觉还好
发现两边都超过m位时,右手的每次增加的量只会随奇偶性变,然后先暴力,然后求出对应的矩阵,乘起来后用矩阵快速幂搞搞即可
T4
把团抽象成点,点抽象成边,题意就转化成了,给每一条边定向,使得点的入度为偶数的点尽量多
把dfs树求出,然后从底向上调整,先把全体边连往祖先,然后对于一个点,如果度数为偶数,就不用调整,奇数就把父边取反,这样调整到根就可以尽量多了
方案就把连向每个点的边两两匹配即可