欢迎来到狼蛛之家|

狼蛛之家

园龄:3年3个月粉丝:3关注:1

1.9模拟赛题解

T1

从左到右扫描,首先如果 ai<bi 那么一定无解,否则不断在其右边找最近的 j 使得 aj[bi,ai],把 aiaj 交换。感性理解这是对的。

T2

先证操作次数不大于 2。考虑第一次把所有 i>j 的边删除,第二次把 i<j 的边删除,易知这样操作符合要求。

因此只要能买到一个环,答案即为 2;否则为 1。问题转化为求最小环。

考虑把每个点拆成出点和入点,自己的入点向自己的出点连边,对于原图中的边 ij,在新图中从 i 的出点向 j 的入点连边。跑 n 遍 Dijkstra 即可。

T3

直接在最短路图上爆搜。由于 n 只有 50,因此时间复杂度的上界大约为 O(3503),这是能过的。

T4

容易发现 ci=ai+bi+[aj+bj10],其中 ji 右边最近的满足 aj+bj9 的位置。

一次修改发生时,如果第 i 位从进位变成不进位,或者从不进位变成进位,那么影响会一直持续到 i 左边最近的满足 aj+bj9 的位置。

所以用一个数据结构维护所有 ai+bi9 的位置,需要支持插入、删除、查询前驱和后继。考虑使用 set,时间复杂度 O(nlogn)

警钟敲烂:对 set 直接使用 algorithm 库的 lower_bound 的时间复杂度为 O(n),需要使用 set 自带的 lower_bound!

posted @   狼蛛之家  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起