省选模拟21

A. 灯

  首先发现如果将一段连续区间变成一个点,那么加入一种颜色的贡献只和这种颜色所有点两边的已经有颜色的点数有关。

  所以就可以考虑根号。对于点的个数小于根号的颜色可以直接暴力枚举每个周围颜色。

  对于大于根号的颜色,可以考虑在加入或者删除的时候枚举所有大块,更新大块的答案即可。

B. 十字路口

  对于两次观测中的同一个灯,如果均为红灯,那么两次观测的时间之差为红灯时间相减。将所有这样的等式找出来,若将这样的等式看做一条边权为k的边,那么周期就是图中的最小环。

  所以只要用Floyd判断最小环即可。然而这样的复杂度不对。

  考虑更改方程的未知数为变成绿灯的时间,那么未知数的个数变成了n,将两种做法结合起来就可以AC了。

C. 密室逃脱

  其实我们只关注到达1的人最多能有多少,显然的贪心策略是让尽量多的人向1走。

  所以我们可以考虑dp,令$f[i][j]$表示最多有j个人能到达i的时候,前i个房间最多的人数。

  考虑转移。如果$j<a[i]$那么有两种情况:$i+1$个房间有$b[i]$个人,那么他们只能打开通道,这$j$个人可以过去。否则只能有少于$b[i]$个人。

  若$a[i]<=j<a[i]+b[i]$ 这边可以自己打开通道,所以$i+1$不能有人,所以转移到$f[i+1][j-a[i]]$。

  否则,这边可以自由打开两端的通道,而且所有人都可以到$i+1$,所以转移到$f[i+1][j]$。

  于是直接转移就可以了。

猜你喜欢

转载自www.cnblogs.com/hzoi-cbx/p/12284875.html