第六周训练记录
A:MSY场上完成。
H:CYS场上完成。大模拟。
I:CYS场上完成。简单计算几何。
B:CYS补完。
数论题。
题解说,显然,对于n等于某一特定值的答案,f[n]=balabala,那就显然吧。
ans=Σn*f[n]=balabala。
用杜教筛求出欧拉函数,用矩阵快速幂求出斐波那契数列,数论分块得解。
C:MSY补完。
D:ZKL补完。
E:ZKL补完。
G:MSY补完。
J:CYS补完。
题解说,显然,交换a(或b)数组中的任意2个元素,不改变答案,那就显然吧。
故先对a、b数组进行排序。
把大矩形分解成若干个L型与1个小矩形,容斥可解。
第五周训练记录
I:签到,由CYS完成。
D:签到,由ZKL完成。
然后两题退场(lll¬ω¬)
A:线段树。
把所有比当前m大的数看成1,比当前小的看成-1,相等的看成0。
容易得到:长度为k的0 1 1、0 -1 -1,等序列只需要k-1次操作即可。
而形如0 1 -1的序列则需要(k-1)*2次。
对于一个m值,需要O(n)的复杂度。
对于多次询问,用线段树修改0、-1、1值即可。
B:DP。
设dp[j][k]表示升第一级前经验到j,升第一级后经验到k所需时间,
则dp[a1][a2]即为所求。
E:大模拟。
将每个人按照年龄从小到大排序,考虑贪心取年龄大的人开车,或者年龄大的人骑摩托。
开数组分别记录从年龄大的开始开车能借出的年龄,
和从年龄小的开始自己骑车能借到的年龄,
再开一个数组表示从年龄小的开始被带着能借出多少年龄。
从小到大枚举开车的人的人数,将需要借的总年龄加起来,能借出的总年龄加起来,
判断是否足够借,足够的话就答案取最小值。
F:思维。
一开始以为是二分图匹配,然鹅单纯地两两匹配就可以了。
因为深度小的点能走到的位置更多,
因此采取贪心,使每个点尽可能与深度大的点相连。
J:思维。
答案为每个点的边按照权值排序后两两配对。
赛场上估计只能赌最后一定可以连成环了=。=
第四周训练记录
ABDGHKLM:由CYS于去年8月份完成。
J:由ZKL完成,用他自己的话说:模拟就完事儿了。
I:由CYS完成。
考虑对询问按照K排序后进行在线操作。
这样只需要做两次floyd(T=0或1时各一次),
把结点一个一个加进去即可。
CEF:没人会做。本该写C的MSY拉闸了。
第三周训练记录
A:由于CYS死在电路实验室里,A由MSY完成,
据说是个签到。
G:初始想法是简单贪心,对于每个起点,只保留权值最小的边,跑DFS。
问题在于可能走进死路,最终无法到达终点,从而WA。
故一开始先做一次DFS,把所有能到终点的点先求出来,
在选择边时留下“能到终点”且权值最小的边。
(因为笨比排序排错了导致WA了4次)
H:一开始认为对于“1 2 3 4”的序列,唯一解为“4 3 2 1”,
故转化后求逆序对即可,甚至还写了个线段树求逆序对......
后来发现对于同一个序列有好多不同解,全部推翻=。=
在手画了24种排列后发现对于b数组的“1 2 3 4”,
只要把a数组中的“3 4”放在前两个位置,把“1 2”放在后两个位置:
因为min(3,4)>max(1,2),故不管如何排列都不影响结果,
只要位置对应即可。
J:翻了题解后才做出来。
考虑到区间没有重合,因此可以对所有区间排序后建树。
显然用树形DP可解:dp[x][k]=max(∑dp[son][k],dp[son][k−1]+val[x])
由于复杂度感人,考虑优化。
考虑到覆盖k次的答案是在k-1次的基础上再覆盖一次,
故对于一个区间,记录其“覆盖区间1次”的所有答案并排序,一次次累加即可。