比赛时由于手速太慢,水的一批……
赛后改了一波题……
A1 给定两个10*10的矩阵,问是否可以通过上下、左右对称以及旋转的方式重合。
直接爆搜即可
A2 字符串Hash
B1 求叶子节点
B2 在树上选K个点,求对于K(1~N)个点之间的简单路径上的点数最大值。
1特判,2直径,其他考虑贪心,从直径的一端开始搜,剖一下重链,每次取最长即可。
C1水题略
C2 N个数切成K段,定义每段价值为和模P,求最大价值。k ≤ N ≤ 20 000, 2 ≤ k ≤ 50, 2 ≤ p ≤ 100
直接DP,f【i】【j】表示前i个切成j段,转移时,记录一下最优位置优化一下即可。
C3 N个数切成K段,定义每段价值为和模P,求最小价值。(k ≤ N ≤ 500 000, 2 ≤ k ≤ 100, 2 ≤ p ≤ 100)
依然DP,考虑维护g【i】【j】表示f【i】【j】取最小时,最后一段模p的最大值,转移考虑j-1多开一段,或者在j段基础上加在末尾,注意g【j】+当前元素如果>p应该减掉一个p。还有数组滚一下。
D1水题略。
D2线代题做不动
E1 给出平面上N个黑点,M个白点,无三点共线,问是否可以给出一个完美匹配(即黑白之间建立双射),使线段之间无交点。
结论题,N!=M输出No,否则输出Yes。比赛时窝看N只有10 ,果断写暴力还打挂了QAQ。
证明的话,大概是考虑所有匹配线段之间的长度和,最小的匹配方案一定无交点,由三角形的三边关系可知。
E2 数轴上有N*2个端点,要求选K对,每个点只能在一对中出现,定义其价值为端点距离差,问最小价值和。
(2 ≤ 2K ≤ N ≤ 500000, K ≤ 5000)
考虑贪心一定只在距离差前K*3小的点对间出现即可。
E3 给出E1的构造 1 ≤ N ≤ 10000
题解是随机一个点(???),因为无三点共线,所以按照角度扫过去,黑-白一定是连续的,只要切成两边黑白点数目都相等即可,期望NlogN
F1 水题略
F2 给定数列a,以及值域{1, 2, …, m} ,再给出一个数组b,选定一个区间,设区间内值i个数为ci,要求ci>=bi的前提下,
∑ci−bi
∑
c
i
−
b
i
最小。
类似two–pointer的思想,每次ci小于bi右指针就一直往右移,记个数维护一下。
F3 FFT裸题,不过要贪心一下,每次取最小两个合并。