T1(luogu3434)
comment:水题,考试时我想的是开一个数组在读入时预处理出该长度什么时候会被拦住,但这样数组开不下,剩下只能模拟。
实际上应该把圆筒变成递减序列,再二分该长度即可。
T2(Luogu3457)
comment:难想+细节多,据说我唯一想得比较正确的是按高度从小到大插入点
我们知道,如果一个点和一个海拔不高于它的点相连
那么连在那个点是更优的,所以考虑按照每个点的海拔排序
既然按照海拔排序,相邻的海拔递增的点可以放在同一个集合里面讨论
考虑使用并查集,每一个集合中只需要有一个抽水机即可
每次从海拔最低的点中选出一个点
将它和它周围的海拔比当前海拔低的点直接链接在一起
同时,维护每个并查集是否存在抽水机
如果当前点是城市,并且所在的并查集中有抽水机了
显然是不用再额外增加抽水机了
但是,如果当前点和周围的点合并完之后,所在集合依然没有抽水机
因为它所在的集合周围的点海拔一定更高,不可能有抽水机
所以在当前集合中一点要放一个抽水机,
那么,给当前集合放一个抽水机,同时答案加一即可
放抽水机的过程在插入完一种高度开始实现。
T3(Luogu3459)
comment:本来是个链剖模板题,但是我忽略了这个图是棵树(暗示:1、它到比特堡的路径恰好只经过编号比它的编号小的村庄。2、读入n-1条边。)。然后打的SPFA,每修一路把该边变为0再修改后面距离,比暴力还慢(并且还把每个起点距离赋为0!!!)。。。
T4(Luogu3444)
comment:鬼畜的贪心
我们知道,如果我们选定了以横向为主,或者纵向为主,
那么就有尽可能减少另一个方向上耕地的次数
所以分开贪心,但是本质相同,所以接下来只考虑纵向为主
既然确定了以纵向为主,那么就要尽可能减少横向操作的次数
所以,只要能够纵向耕地,就不考虑横向耕地
可是,如果到了某个时候,纵向无法耕了
此时必须横向耕
但是我们不知道应该从上面开始还是下面开始
为了解决这个问题
我们假设上面最多耕的次数是有限次
换种想法,我们假设上面至少耕这么多次
既然上面的次数确定,那么下方的耕地次数越少越好
所以耕地的优先级:
左-右-上-下
只要能够耕就一定耕
这样,枚举-贪心的做法就可以做啦
横向、纵向分别算一遍
时间复杂度O((n+m)^2)
总结:1、考试开始时应先通览全卷。
2、打代码不要过于心急,注意细节,想清楚,不要打漏or打错。
3、最大问题体现在嘴巴能AC,但代码实现能力不强。
4、打贪心时在不保证正确性的情况下应采用多种方法。