前期罚时爆炸,后期出题无力
A. Artwork
题意
在一个左下角坐标为 ( 0 , 0 ) (0,0) (0,0) ,右上角坐标为 ( N , M ) (N,M) (N,M), 10 ≤ N , M ≤ 1 0 4 10\le N,\ M\le10^4 10≤N, M≤104的矩形房间里,有一个盗贼在坐标 ( 0 , 0 ) (0,0) (0,0) 处。房间内还有 K ( 1 ≤ K ≤ 1000 ) K\ (1\le K\le 1000) K (1≤K≤1000) 个摄像头,给出每个摄像头的圆心和监控的半径,盗贼不能进入任何摄像头监控的范围,包括边缘。
求这个盗贼是否能够到达右上角。
题解
计算几何,要使得盗贼不能运动到右上角,则有一连串的监控范围链接了左上到右下,从而阻断了盗贼的路径。
把每个监控范围设为一个点,左边界和上边界视为一个点,右边界和下边界是为一个点,任何有重叠关系的两个点连边,即判定左上边界是否和右下边界连通即可。
用并查集和图上BFS均可。
时间复杂度: O ( K 2 ) O(K^2) O(K2)
B. Buffoon
题意
判断第一个数字是否是 n n n 个数字中的最大值或最大值之一。
题解
C语言练习题
D. Denouncing Mafia
题意
给出一个有 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le10^5) n(1≤n≤105) 个结点,根结点为 1 1 1 的树,每一次操作可以选择一个结点,然后将这个结点到根结点路径上的每一个点染黑。
求进行 K ( 1 ≤ K ≤ n ) K(1\le K\le n ) K(1≤K≤n) 次操作后,最多能把多少点染黑。
题解
贪心的思想,每次选择当前能够染最多的操作。
方法一:
我自己写的SB方法,记录每个结点保存它到最远的叶子结点的距离,并记录到这个结点的路径。最初只有根结点加入优先队列,然后每次操作从优先队列中取出一个结点,把这个结点到最远叶子结点路径上的点全部染黑,同时将路径上挂着的其他结点入队,进行 K K K次即可。
方法二:
同样记录每个结点保存它到最远的叶子结点的距离并记录到这个结点的路径。直接对所有节点排个序,然后从大到小用同样的方法染色,无非是要跳过黑点。
时间复杂度: O ( n l o g ( n ) ) O(nlog(n)) O(n