普及T1 数字统计
某一道普及的弱化版。
模拟即可。
1 |
|
普及T2 接水问题
模拟即可。
可以用堆加速,但我的代码里没用。
不用堆的时间复杂度是$O(nm)$,用的话是$O(nlogm)$。
1 |
|
普及T3 导弹拦截
此题致敬了11年前的那道经典题目。
我们希望这个工作半径最小,直觉上就要让这两个系统都被充分利用。也就是让第一套拦截一部分,第二套拦截另一部分。
我们先对所有导弹到第一套系统的距离从近到远排一个序,企图把这个序列切成$2$份,将前半部分给第一个系统,将后半部分(远的)给第二个系统。
枚举切开的部位,找到第二套系统应该有的工作半径,也就是分配给第二套系统的最远导弹到他的距离。这里用各种方法实现,我用的是对所有导弹到第二套系统的距离从远到近排一个序,然后用一个指针扫的方法。
综上,解决本题的时间复杂度为$O(nlogn)$。
1 |
|
普及T4 三国游戏
这个人肯定不会输给电脑。
因为计算机的选将是完全根据这个人的选法来的,也就是说,这个人自己是一定有把握选中更好的策略的。
然后具体选法,非常简单:
最大的一定被拆,所以我们矮子里拔高个儿,选默契值排第二且是所有第二中最高的一对将。
这样就做完了。
时间复杂度:$O(n^2)$。
1 |
|
提高T1 机器翻译
用队列模拟即可。
1 |
|
提高T2 乌龟棋
按卡片数$DP$即可。只要知道每一种卡片的使用情况就可以推知当前所处位置,从而进行状态转移。
设$f(i,j,k,l)$表示用了$i$张$1$,$j$张$2$,$k$张$3$,$l$张$4$的最大得分,则状态转移方程容易导出。
1 |
|
提高T3 关押罪犯(待考察)
贪心。
将仇恨值从大到小排序,从仇恨最大的一对人开始处理起。记录每一个人的“对手”,看作是这个人和“对手”必须处在不同监狱。如果两人所处监狱相同那就表示分配到此为止,输出答案。
然后分类讨论,假设两人都还没有对手就互相记为对手,表示两人不会在一个监狱;只有一个人有对手,那就另一个人把这个人记为对手,并且把这个人的对手收为己方(用并查集实现);两个人都有,那就收各自的对手为己方。
讨论完之后,处理下一对罪犯,如此反复。
这样就可以在$O(mlogm)$的时间复杂度内解决这个问题。
1 |
|
提高T4 引水入城
先搜索,搜出每一个出水站能最多支援几个国家。
然后会发现每一个国家能支援到的国家一定是一段一段存在的。
如果不是,那么会形成一些国家无法被到达的局面,就输出$0$,然后统计。
否则对每段区间排序后贪心选择即可。
可以用一些手段加速,如对在第一行的国家,只选取相对周围的国家更高一些的国家来搜索,因为这个国家肯定可以向两侧扩展。
时间复杂度:$O(nm)$(近似)
1 |
|
v1.5.2