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)\)

猜你喜欢

转载自www.cnblogs.com/GerynOhenz/p/9470988.html
今日推荐