2023牛客寒假算法基础集训营5 自卑赛

题目地址

A
注意到可以将价值排序 选择k个就可以前缀和来得到。

如何快速得到当前元素排名可以离线所有的询问 也可以直接在价值序列上二分,后者明显好写。

B
注意到如果n为偶数每次没人一定都会选一个石子 这就是平局。

否则先手必败,先手会多一个石子。

C
算是一个分类讨论的问题。

先考虑a,b串的长度分别为n,m.

不妨设n>m,此时考虑a是否前面一部分都是一样的这样在某个排列下可以全部变为0。

注意到b也要和a一样相同数字变为0.

此时再次看a,b的长度n',m' 若n'>m'则a一定大于b.

如果n'==m' 注意之后还需要逐位比对a,b确定是否存在\(a1!=0,bi==0\)的情况。

当n==m时如果两个不一样那么一定为!.

D
可以维护一个当前的答案区间[1,w] 可用道具利用stl来维护这里我用的是一个堆来维护最小的左端点。

模拟即可。

E
算是很难的构造题。

我是参考题解的想法的。考虑1号点不动其他点逐次碰到1号点。首先轮数一定为n-3 我不太会证明。

之后奇数轮偶数位置向右移动 奇数位置向左移动 注意这里设2是一号位置,3为2号位置。

偶数轮偶数位置向左移动 奇数位置向右移动。

容易发现经过n-3轮 3恰好到达n的位置。而2一开始就在2的位置(和1相邻。

那么容易知道每个数字都在n-3轮内和1相邻。

进一步的考虑两个初始同向,相向的数字也会碰到。

考虑相反运动的数字 考虑在第n-3轮后的位置也可以遇到。

构造结束。

F
是一个贪心类的题目,想法复杂了导致没写。

考虑先找到最大的字母 前面的观察是否能全删 不能就找次大的。

这样的情况答案为保留+序列后剩下的+删掉的排序。

另一种情况序列后剩下的为0 k还不为0 倒着把栈里的删了 因为已经删掉的数字中可能有比栈里的数字还要大的情况。

G
容易想到建图 跑最大匹配。

需要注意n号元素也需要建图 此时可能有log条边其他情况都是2条边。

直接匈牙利算法就行。

H
直接模拟。

I
很有意思的构造题。

注意一种方案一定不亏并且可能不赚的方案也合法。

那么先考虑一定不亏的方案 1 1 2 4 8...

这种方案不亏且花费灵石最少,如果这种方案不合法那么一定无解。

现在考虑多出来的灵石怎么做 在上述方案上增加灵石 如果给一号位置增加了x灵石 后面的系数就是该方案本身。

对每个位置不断的试增灵石即可。

可以知道复杂度为nlog

J
构造题。(怎么这么多的构造题啊喂。)

容易知道最远距离为n*n-1 这要求我们来一个单向边构成一条的路径。每个点出度<=1 入度<=1.

从起点开始构造是困难的,考虑从中间开始构造,容易构造出来 寻找规律把图生成出来就行。

K
每次选择x/2+1的人数抱团即可。

L
设一个人数状态直接dp就行了。

我直接跑dij了 多了一个log,有点蠢了。

posted @ 2023-02-04 11:33  chdy  阅读(25)  评论(0编辑  收藏  举报