BUPT 2022 Summer Training #5

链接:https://vjudge.net/contest/504103

A - Berstagram

水题略

B - The Feast and the Bus

水题略

C - Trip to Saint Petersburg

题意

有一堆事情,每件事情有开始时间和结束时间,以及做完这件事能赚到的钱。一个人来这个地方赚钱,他可以做任意多件事,且不同事件的时间可以重叠。但他每多待一天就得花k的伙食住宿费。问做多能赚多少钱,如果赚不到钱就输出-1.

思路

先把所有事件按结束时间从小到大排序,然后遍历这些事件。再遍历的同时用线段树动态维护左端点的最优解。假设现在加入的事件开始时间为L,那么开始时间比L小的一段前缀要全部加P。同时从1
到当前枚举到的右端点要全部-k.

枚举一个端点,再用数据结构处理另一个端点信息大概是一种做区间问题的经典套路。

F - Data Center

水题略

G - Discarding Game

题意

有两个长度为n的数组a和b,你和对手分别持有一个数字,在第i轮你的数字加上a[i],对手的数字加上b[i],某人的数字达到k就输了(可以一起输),如果n轮后都没达到k则平局。现在你可以在某些轮次完成后选择重置,重置后两者的数字会减去min(x,y),即抵消直到有一方数字为0,求最少重置几次可以让自己赢。

思路

为什么朴素的贪心(如果自己将要达到k就重置)不行?因为朴素贪心做到的是让自己活尽可能久而不是让对方尽快输,从而可能会用更多的重置次数,有时会为了减小自己的数字而让对方的数字也减小了一大截,从而让对方活得更久了。

一个比较显然的结论是在某一轮后重置的结果和之前有没有重置、在什么时候重置是无关的,所以我们可以直接考虑最后一次重置,让最后一次重置的时间尽可能靠前,这样可以让重置次数最小。

确定了最后一次重置的位置后,前面的问题其实就是让自己活得尽可能久了,也就是说接下来用朴素贪心再扫一遍就可以了。

H - Happy Birthday

题意

有0~9的数字分别c[i]个,求最小的不能表示的正整数

思路

  • 如果0的个数严格小于其他所有数字,那么答案形如100000(c[0]个0)
  • 否则,找到除0外个数最少且最靠前的数字,答案形如66666(c[i]+1个i)

N - Wires

题意

给定一张图,每次操作可以修改一条边的一个端点,求至少操作几次可以让所有边都连通(点不用管)。

思路

答案为连通块个数减一,其他所有连通块都可以通过一步操作连到中心连通块上。

操作方法为:如果这个连通块有度数为1的点,那就把以这个点为端点的边改成连到中心连通块上;如果没有度数为1的点说明有环,在环上找一条边连到中心连通块即可。

posted @ 2022-07-15 14:16  wild_chicken  阅读(17)  评论(0)    收藏  举报