这次 UER 虽然难度相对于上次简单了一些,但是看起来大家认为还是比较难。这次管理员在对题目难度的判断上还是出现了失误,下次我们尽量把难度再放低一点(如果还有下次)。
赶路
from skip2004
算法一
我会随机化/爆搜/状压/调整法!
我们反正就是要搞一个序列满足条件,随便怎么搞!
得分
算法二
这个第
事实上也很简单,我们按照原点极角排序,然后走一圈就可以了!容易证明不会有自交。
算法三
这个第
可惜的是有一些同学没有发现可能有
同时,这个两个点也让我们意识到算法二可以使用的范围:起点不在凸包上。此时其周围都会有点就可以使用算法二了。
算法四
既然起点不在凸包上可以用算法二,那么我们就只要解决起点在凸包上的问题了!
容易发现,我们每次走斜率最小或者最大的边,到达的点还会在剩余点的点集的凸包上。如果这两个点都不是终点,我们任选一个,否则选另外一个。
时间复杂度
当然也有
知识网络
from Itst
算法一
考虑对题目问题进行抽象。建立一个
图上点数为
算法二
注意到标签产生的边数过多,考虑进行优化。在
这样利用新建立的
算法三
对于
算法四
注意到算法三中将知识点的计算与其标签的计算联系在了一起,考虑利用这样的思路拓展得到满分算法。
使用算法二的方式建图后,从每个标签开始运行最短路并建立最短路 DAG,复杂度
注意到正在计算的知识点到目标节点的一种路径是先走到标签对应节点再通过最短路 DAG 到达目标节点,而从标签对应节点走到目标节点的一种路径是通过正在计算的知识点到达,因此正在计算的节点到达目标节点的最短路长度只有两种可能:一种是标签到达它的最短路长度,一种是它减一。而当该长度取到后者时,从从标签所在节点到达目标节点的一条最短路会经过正在计算的节点,因此正在计算的节点在 DAG 上的后继中存在目标节点。
因此容易得出长度取到最短路长度 -1 的充要条件是目标节点是正在计算的知识点在 DAG 上的后继。计算前驱后继相关的信息考虑使用 bitset 进行计算,即维护每个节点的前驱有哪些节点。
但一般的 bitset 长度是固定的,而每一次计算时长度都是不固定的,如果直接开到最大复杂度则会出错。测试点 8 提供了这样的部分分,同时测试点 6,7 也可能可以通过该方法获得分数。
正确的思路是可以对运行的点进行分块,每
面试
from he_____he
算法一
对每个
询问次数
算法二
对于
算法三
有很多种与正解类似但不够优秀的做法可以做到
算法四
第一次询问
不妨设
如果
第二次询问
若
若
,则第三次询问 ,得到的答案是 ,可以得到 的值,从而能够分出第二次询问得到的究竟是 还是 ,就能求出 的值了。若
,则第三次询问 ,得到的答案是 。由于 或 ,所以 。所以询问得到的是
, 可以得到 的值,同样就能够知道 的值,分出第二次询问属于哪一种情况,求出 的值。
期望得分
P.S. 本题 std 只有不到