UOJ Round #8 赴京赶考 解题报告
算法零
n,m≤100,q≤10 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS。
复杂度 O(qnm),可以拿下前30分。
算法一
n≤105,m=1,q≤105 的话,我们可以直接预处理出 (1,1)−(1,i) 的距离以及 (1,i)−(1,n) 的距离,然后就枚举走的方式 i−j 或者 j−n−1−i 就可以啦。
复杂度 O(n+q),结合算法零可以拿下50分。
算法二
n,m≤105,q≤105 的话,我们发现我们可以突破维度的界限,把每一维拆开分别考虑,最后的答案就是每一维的答案的和。
这为啥是对的呢?
对于 ai≠ai+1,无论 bj 取啥值,你从 (i,j) 穿越到 (i+1,j) 的时候,都必然会花费等待时间;否则如果 ai=ai+1 的话,就必然不会花费等待时间。所以一条路线的总等待时间可以拆分成各个维度的等待时间的和。
然后这个问题就变成一维问题啦,直接用算法一的搞法就可以了。
复杂度 O(n+m+q),可以拿下100分。
至于代码的话,UOJ 上一大把一大把的呀。。。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步