Codeforces Round #503 Div.2

Codeforces Round #503 Div.2

C. Elections

题目描述:有(n)人,(m)个党派,每个人投票给一个党派,当用(c_i)贿赂第(i)个人时,这个人可以改选成任意一个党派,问最少花多少钱,使得第一个党派得票严格对其它党派。

solution
想了好久才把思路想出来,直接枚举最终第一个党派的得票,然后大于等于这个票数的党派肯定要改选,然后剩下的从小到大排序选即可。

时间复杂度:(O(nm))

D. The hat

题目描述:有(n)个围成一圈的数(a_i),相邻两个数的差值为(1),通过不超过60次的交互询问某个(a_i)的值,确定是否存在(a_i=a_{n/2+i})

solution
看了别人的代码,不知为什么对。

首先询问(a_1)(a_{1+n/2}),记住大小关系,(L=1, R=n/2+1),二分,每次询问(mid)(mid+n/2),如果大小关系与之前记录的相同,则(L=mid),否则(R=mid)

时间复杂度:(O(2logn))

E. Sergey's problem

题目描述:给出一个(n)个点,(m)条边的有向图,现在选择一些点,使得选择的点不能直接有边相连,没被选择的点能通过选择的点在不超过两步内走到。输出一种选择方案。

solution
首先从前往后枚举点,若没被标记,则选择该点,然后将该点指向的点全部标记。
这样就会出现直接有边相连的情况,所以从后往前枚举选择的点,看指向它的有没有选择,如果有选择,则这个点不选,这样这个点指向的点就可以通过指向它的选择的点在两步内走到。

时间复杂度:(O(m))

原文地址:https://www.cnblogs.com/GerynOhenz/p/9470988.html