- 博客(9)
- 收藏
- 关注
原创 题解:AT_abc369_e [ABC369E] Sightseeing Tour 详细版
我们使用dfs来暴力枚举,首先考虑每条边的方向,再全排列去确定遍历顺序。在每一种具体方案中,我们可以将点之间的最短路相加,并且加上边权,得出这种方案的最短路径长度,再取最小值即可。,可以暴力枚举每一条边经过时的方向以及经过它们的顺序。条必须经过的边(但是方向没有限制),问从。,考虑预处理出任意两点之间的最短路。观察数据范围,可以发现:虽然。的最短路长度是多少。
2024-09-05 19:45:19
560
原创 题解:AT_abc366_d [ABC366D] Cuboid Sum Query
这是一个区间求和问题,因为Q很大,所以使用前缀和。N不超过100,所以在Q次询问中嵌套一次O(n)的循环是不会超时的。令s[i][j][k]表示第i层中左上角为(1,1),右下角为(j,k)的矩形中所有元素的和。然后在Q次询问中,枚举层数l~r,计算该层的元素和并累加即可。
2024-09-05 19:20:15
201
原创 题解:AT_abc369_e Sightseeing Tour
我们暴力枚举每一条边经过时的方向以及经过它们的顺序,在每一种具体方案中,我们可以将点之间的最短路相加,并且加上边权,得出这种方案的最短路径长度,再取最小值即可。,可以暴力枚举每一条边经过时的方向以及经过它们的顺序。条必须经过的边(但是方向没有限制),问从。,考虑预处理出任意两点之间的最短路。观察数据范围,可以发现:虽然。的最短路长度是多少。
2024-09-01 16:15:39
793
原创 题解:P4009 汽车加油行驶问题
可以使用SPFA算法完成本题。每一个状态有三个值,分别是当前到达的行、列,以及剩下的油还能走几步。考虑是否需要加油,计算边权即可。这是一个分层图最短路问题,我们可以使用升维的方法来完成本题。因为存在加油付费的问题,边权不一定为。定义一个结构体,用来存放当前到达的行、列,以及剩下的油还能走几步。,所以不能使用广搜来做。
2024-08-30 17:12:47
636
原创 题解:AT_abc368_d[ABC368D] Minimum Steiner Tree
我们可以发现,这棵无根树的根必须是给定的特殊点之一,不然根节点就可以删除,答案就不是最优。所以我们使用深度优先搜索遍历这棵树,根节点为给定的点中的任意一个,不妨使用第一个读入的特殊点。深搜函数中,我们要考虑一下这个点取还是不取。如果这个点的后代中有特殊点,那么这个点是一定要取的,因为树是一个无向无环连通图,要是不取的话我们就没有办法取到那个特殊点了。树,删除其中的一些点和边,使剩下的点和边仍然能够组成一棵树,且包含给定的。个特殊点,问最少剩下几个点。
2024-08-30 15:34:05
262
原创 题解:P2217 [HAOI2007] 分割矩阵
很容易想到,dfs 函数的参数就也是这五个值了。它能使所有重复的操作只做一次,大大降低了时间复杂度。否则枚举切断的位置及两边分配的分割次数并递归求解。但是时间复杂度有点难以接受啊,优化一下吧。的时候返回矩阵里所有元素之和,我们可以用。首先,我们要弄明白题中的方差是什么。有一种很有效的优化,那就是广为人知的。接下来,我们思考一下题目怎么做。如果已经存过答案了,那么返回。次,操作范围为左上角在。那么函数出口是什么情况呢?数据很小,于是想到了。下面我们来看看框架。
2024-08-27 19:25:19
1493
原创 题解:AT_abc367_d [ABC367D] Pedometer
没关系,我们可以再开一个数组来维护答案。c[s[i]] 表示 max(1,i-n+1) 至 i-1 中 s[i] 出现了多少次。只是要注意:要扔掉前面太靠前的元素,然后注意在复制一遍的数组 (n+1~n*2) 里。所以怎么计算答案呢?用 s[i] 表示前 i-1 个数的和除以 m 的余数。然后我们要找两个数 a,b ,满足 s[a] = s[b] 且 a < b 且 a + n - 1 >= b。这道题的数据很大,不能暴力枚举。我们可以断环为链:把整个数组复制一遍。把 s[i] 加进去,不然计算重复了。
2024-08-26 15:34:15
274
1
原创 题解:AT_abc368_c [ABC368C] Triple Attack
可能也会很大,所以一遍一遍的模拟就会超时。我们发现,题中有一个要求:每次必须打离自己最近的活着的敌人。我们就只用枚举每个敌人即可,在枚举的过程中计算答案。的倍数,不是这个敌人攻击了三的整数倍数次!这是个周期问题,自然会想到除法。这道题有点难度,因为。
2024-08-26 14:07:48
320
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人