补题记录
文章平均质量分 66
Varitall
ACMer,但是想成为CTFer
展开
-
[补题记录] 基于日志的系统故障预测
某通讯设备系统定义了一系列系统事件,当事件发生时会将该事件ID记录到日志中,该日志的数据全集称为原始事件序列。根据经验,当某些特征事件出现时,往往预示着系统存在需要解决的潜在问题。现给定一组原始事件序列events(元素可以重复),以及一个特征序列traits(元素不重复)请在 events 中从左往右按匹配规则找到一个匹配特征序列的最短连续子序列;如果存在多个最短的,则返回最早匹配到的连续子序列。:对于events中的某个连续子序列,当从中去除n。原创 2024-08-01 11:18:21 · 492 阅读 · 0 评论 -
[补题记录] VLAN配置信息
配置允许通过的 vlan-id– 配置不允许通过的 vlan-id (命令中的undo 表示不允许)其中<vlan-id>有三种:单个 vlan-id:如10;vlan-id 区间:用to连接两 id 来表示,格式为id1 to id2(id1 < id2,左闭右闭),如10 to 11;任意多个以上两种组合,之间用单个空格分隔,如,表示 10, 12, 20, 21, 22。所有 vlan-id 在初始状态下均为不允许通过状态。现用户针对某一端口输入一组命令cmds。原创 2024-07-31 11:02:08 · 603 阅读 · 0 评论 -
[补题记录]Leetcode 15. 三数之和
还需要额外注意 […, a , a , …, a , b , b , …] 这两种特殊情况。),实际上还是会超时。因为即使确定了第一、二个数,当查找第三个数时,哪怕用二分,都还要再乘上一个。但这也同时提醒我们,如果确定了第二、三个数,那就可以判断出。,这就意味着我们可以通过移动 2、3 指针的方式,来找到。因此这道题可以用双指针的方式来做,还是有点难想的。为了去重,需要先排序。排序之后,显然每一个。就可以作为三数之中的。,第二、三个数只能在。原创 2024-07-30 23:14:03 · 421 阅读 · 0 评论 -
[补题记录]Leetcode 11. 盛最多水的容器
而指针移动的逻辑也很简单,大家都知道木桶效应,那么我们肯定是需要将小的那个指针赶紧移走,才有可能获得更大的值。显然一开始我们需要考虑整个水箱,因此可以考虑使用两个指针指向 [1, n]。原创 2024-07-30 21:59:07 · 233 阅读 · 0 评论 -
[补题记录]Leetcode 3.无重复字符的最长子串
不断扩大数组长度,当遇到重复字符的时候就停止扩大,然后结算一次答案。比如:abb 包含了重复字符 b;abc 没有包含重复字符。给一个由英文、数字、符号、空格组成的字符串,找出其中。要知道一个区间内是否包含了重复字符,我们可以用。最后移动左指针的时候将其对应字符标记为。来保存现有字符的存在情况。注意是子串,不是子序列。原创 2024-06-04 16:30:46 · 335 阅读 · 1 评论 -
[补题记录]Leetcode 209.长度最小的子数组
题目要求维护最小的长度,因此我们希望:当条件不满足时,不断扩大子数组长度;)时,就可以尝试缩短子数组长度,并进行一次答案的维护。这显然是一个双指针的解法。,要求算出数组中最小长度的连续子数组,数组元素的和。给定一个整数数组和一个整数。原创 2024-06-04 16:05:53 · 312 阅读 · 0 评论 -
[补题记录]LeetCode 167.两数之和 II - 输入有序数组
是面向计算机专业学生的综合学习与刷题平台,欢迎同学们的加入!原创 2024-06-02 22:07:23 · 404 阅读 · 2 评论 -
[补题记录]LeetCode 151.反转字符串中的单词
是面向计算机专业学生的综合学习与刷题平台,欢迎同学们的加入!将每个单词保存到数组中,最后反向拼接即可。稍微注意边界的判断。原创 2024-06-02 14:57:13 · 336 阅读 · 1 评论 -
[补题记录]LeetCode 6.Z字形变换
关键点在于,最后的答案是一行行连接起来的。这样我们就会发现,这个。原创 2024-06-02 14:51:28 · 332 阅读 · 1 评论 -
[补题记录]LeetCode 12.整数转罗马数字
是面向计算机专业学生的综合学习与刷题平台,欢迎同学们的加入!点可以看出,一个符号最多连续。次,然后就必须要改为。原创 2024-06-01 10:09:33 · 699 阅读 · 0 评论 -
[补题记录] StarryCoding 入门教育赛3 E.夜游江滩
宝和桶子晚上吃太饱没事做决定到江边散步减肥,他们在江滩的起始点(位置为。的距离,他们想知道走到尽头一共有多少种走法。对于每组测试样例,一个整数表示结果。),由于他们腿特别长,一步可以走。),要走到江滩的尽头(位置为。每次转移时间复杂度为。原创 2024-05-10 21:25:58 · 855 阅读 · 0 评论 -
[补题记录] StarryCoding 入门教育赛3 D.电弧陷阱
显然电弧陷阱会将整个矩阵分成好几部分连通区域,我们只需要在遍历矩阵的时候判断一下当前位置,是否可以作为出发点即可开始。和桶子在打派的时候被一个艾许的电弧陷阱控在原地动弹不得,于是他们想办法找出哪些地方是可以去的,哪些地方是不能去的。电弧陷阱会使得它的上下左右四个方向充满电弧,走到这些地方就会被困住,不能再行动。容易出错的地方在于,如果选择将 # 周围的点修改为其他字符做标记,那么一定要在。类似这种给一个矩阵,然后有些位置不能去、被挡住、有传送门之类的,一般都需要用到。此时一个连通部分的答案 =原创 2024-05-10 21:20:51 · 399 阅读 · 0 评论 -
[补题记录] Educational Codeforces Round 160 (Rated for Div. 2)(A~C)
我们只需要在处理完第 i 位后,将第 i 位多余的 1,进位到 i + 1 位,这代表着 i + 1 位可以的得到这么多的补充,这样就可以保证,某一位一定是基于最优的情况下去判断的。那么就可以先保证前面的字符相反,当遇到某个字符,没有足够的 0 或 1 可以填补时,就说明最长的 t 就到这了。一个基础的想法是,要满足 w 能求和出来,则 w 的每一位为 1 的位置,集合中必须要有数在这一位为 1。操作后获得字符串 t,问最小的操作代价,能使得 t 的每一位不等于 s 的每一位。原创 2023-12-19 10:37:04 · 492 阅读 · 0 评论 -
[补题记录] Complete the Permutation(贪心、set)
而就算前后两个区间右端点相同,由于我们在前面的区间里已经选完了可以选择的最小的偶数,因此后面这个区间肯定就是永远无法选到互异的偶数的,比如:[1, 3]、[1, 7]、[3, 7]、[5, 7]。的情况,这意味着:明明这个区间可以选到一个很大的偶数,大到不会影响其他所有区间,而现在却因为先选择了可以选择的最小偶数,导致占用了排在它之后的区间唯一可以选择的偶数。先选择一个区间中最小的偶数,然后在其之后的区间也同样选择区间中还没有被选过的偶数中最小的哪个。给出一个长度为 N 的序列,其中的元素都是奇数。原创 2023-11-22 21:27:14 · 269 阅读 · 0 评论 -
[补题记录] Coolbits(2019陕西省赛)
给出 N 个区间,可以从每个区间中选择一个数,问选出的 N 个数的按位与的值最大是多少?假设现在是第 i 位,那么是否能在所有区间中都找到一个数 Xi,它的第 i 位为 1。只要能找到这个数 Xi,那么就一定比 i 后面的低位全为带来的收益都要大。那么我们如何找到这个数,并判断是否符合条件呢?原创 2023-11-21 15:15:33 · 198 阅读 · 0 评论 -
[补题记录] Codeforces Round 906 (Div. 2)(A~D)
考虑到,若当前 i 之前的位置,都已经与对称位置不同,那么在 [i, n - i + 1] 中任意位置插入,都不会对前面的插入有影响,因此我们直接 L、R 双指针判断即可。需要考虑的是:怎么知道用 1 连接完它能连接的城市后,就已经是最大能连接的数量了。你可以将 "01" 插入 S 的任意位置(也可以不插),位置可以从 0 开始。因为每次插入的是 01,因此若一开始 01 数量不相等,直接输出 -1。很容易想到,当我们使用城市 1 去连接其他城市时,更加容易成功。给出 1 个 01 字符串 S。原创 2023-11-02 15:24:07 · 159 阅读 · 1 评论 -
[补题记录] Codeforces Round 904 (Div. 2)(C)
既然要求方案内区间是相交的,所以我们可以使用优先队列,队列大小就是最大值,出队入队过程中又可以维护 1 或者 m 的大小。现在给出 N 个区间 [l, r],当选择某个区间时,可以让该区间内的数都 + 1。最核心的一点就是:不相交的两个区间,无法为答案带来任何贡献。对于每一种选择方案,其代价为:最大的数 - 最小的数。有一个长度为 M 的序列,初始值都为 0。问如何选择区间,使得代价最大。原创 2023-10-28 15:53:14 · 164 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 325(E、F)
因此,我们可以把 K2 当作 dp 表示的值,维护 K1 不超过限制的情况下,K2 的最少数量。有一个二维矩阵,D[i][j] 表示从 i 到 j 的距离。再想到,如果知道了某个状态下的 K[1]、K[2],其实就能求出这个状态下的价值。通常我们在背包中,dp 表示最大价值,但在这个题中,多了一个 K 需要维护。你可以选择在某个城市 i 换乘火车,但不能再从火车换乘汽车。问是否能保证 N 条传输带都能被完整监控,若能,最小代价是多少。最重要的是理解这句话,然后做两个反向的最短🦌即可。原创 2023-10-24 11:35:32 · 160 阅读 · 1 评论 -
[补题记录] Atcoder Beginner Contest 293(E)
一开始想等比数列求和,但是 m 不保证是质数,所以不能用。假设 dp[x] 表示,前 x 个数求和的值。给出 A、X、M,求。原创 2023-10-21 20:07:06 · 232 阅读 · 1 评论 -
[补题记录] Atcoder Beginner Contest 324(E、F)
但是一一匹配肯定是超时的,考虑到遍历过程中我们知道 pre[i] 和 suf[i],就能算出一个值:len(T) - pre[i]。这个值代表着,只要后缀长度大于等于它的,都能作为一次答案。那么对于一个二元组(i,j),只要 pre[i] + suf[j] >= len(T),就能作为一种方案。现在从 N 个字符串中任取 2 个拼接,如果拼接后的字符串的子序列包含 T 字符串,则这是一种合法拼接。假设字符串 S[i] 在 T 中的前缀长度为 pre[i],在 T 中的后缀长度为 suf[i]。原创 2023-10-17 14:59:23 · 148 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 295(E)
也就是说,如果 0 的数量(设为 zero)zero < need,那么就永远不可能满足 [K, N] 中的数都 >= i,概率为 0;反之,如果 need <= 0,就一定满足 [K, N] 中的数都 >= i,概率为 1;但是我们不知道 A[k] 该怎么取值,所以还需要将 P(A[k] >= i) 转换为:后面 N - K + 1 个数 >= i 的概率,显然 [K, N] 中的数不会都 >= i,而一般的情况就是:[K, N] 中的前一部分的数 < i、后一部分的数 >= i。原创 2023-10-14 17:11:49 · 205 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 294(E)
给总长度 L,计划 1 有 N 步,计划 2 有 M 步,每一步给出(v,l),意为在接下来的 l 长度中,每一单位的值都为 v。当我们处于某一个状态时,一定是当前两者的总路程中取一个小的,以及上一步计划的总路程里取一个大的,相减就是应该加上的答案。我们可以维护当前走到了计划的第几步、计划的总路程、上一步计划的总路程。问这两个计划,有多少个单位的值是相同的。模拟题,主要是要想清楚每次如何更新答案。我们将其当作一个铺路的过程。原创 2023-10-14 15:09:48 · 139 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 323(E、F)
如果我们能求出从 X - T[1] + 1 到 X 的每一时刻开始时,恰好播放完上一首歌的概率,那么就可以将这 T[1] 个时刻加起来,再除以 N,就是从 X 开始,播放第一首歌的概率。对于第二句话,我们可以将目标点 C 都换到上半轴,那么 A 只需要移动到 (0, -1)、(-1, 0)、(1, 0) 即可去到推箱子的最佳位置。因此,dp[i] 表示,第 i 秒开始时,上一首歌结束,下一首歌准备开始播放的概率。当 i > T[j] 时,就可以把当前第 j 首歌播放的概率累加到 dp[i] 上。原创 2023-10-08 18:11:21 · 211 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 297(F)
对于某个最小矩形,构成它的摆放方法有很多种,也就是说,如果我们能算出一个大小为 i * j 的矩形,他有 X 种合法的摆放方案,再用合法方案数乘上该矩形的面积(即 X * i * j),就是对应的贡献。位置数 * 矩形面积(i * j)* 合法方案数,就是一个矩形 i * j 带来的贡献,遍历 H、W,求出每一种(i,j)的贡献,累加,就是最后的总贡献。所以现在的目的就明确了,求出 C1、C2、C3、C4 的并集,得到非法方案数,再用 i * j 的总方案数减去非法方案数,就能算出合法方案数。原创 2023-10-07 22:54:25 · 177 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 298(E)
现有 N 个点,初始时,A 位于点 a,B 位于点 b。假设 A 或 B 现在在点 X,每投出一个点数 i,则 A 或 B 会走到 min(X + i, N),先走到 N 的获胜。dp[i][j][0] 的前一步是由 B 做出的,并且 A 在点 i 的状态,是由前一步的所有 A 可能到的点的状态转移过来的。这种形式的状态转移方程,意为:我知道了后几个点的期望,可以反推从前面的点出发,然后获胜的期望。,A 投出 [1, P] 点数的概率相等,B投出 [1, Q] 点数的概率相等。:A 在 i,B 在 j,原创 2023-10-07 10:33:11 · 148 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 322(E)
考虑 K = 5 的情况,就会有 dp[i][A1][A2][A3][A4][A5];再考虑一个参数时,我们是如何得到答案的,显然是通过维护 dp[i][0] ~ dp[i][P] 的最小值来的得到答案 dp[n][P]。那么我们就可以这样做,将参数 [A1][A2][A3] 视作一系列 P + 1 进制的数(因为需要到达 P),如:[0][0][0] ~ [5][5][5] 就是一系列 3 位的 6 进制数。但是现在有 K 个参数,也就是说,我们无法确定 dp 数组的维度。原创 2023-10-06 08:45:23 · 368 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 299(E)
这道题的坑点在于,题目没有很清楚地说明,只要有一个黑色点与 p 最短句路为 d 即可。因此很容易误认为所有距离 p 为 d 的点都要染黑。再次 bfs,判断是否有一个距离为 d 的且不为白色的点,有则 return true,否则这个要求不能满足,输出 No。给出 N(1原创 2023-09-26 10:32:31 · 201 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 321(E)
不断往 X 的父节点考虑,求与 X 对称的点的子树答案,直到 X = 1 或者 K == 0,此时若 K == 0,则说明当前的 X 作为单独一个点的答案。有一颗 N 个节点的完全二叉树,现在给出节点 X,一个整数 K,问举例节点 X 的长度为 K 的点有多少个?首先考虑以节点 X 为根的子树,求出往下 K 层的左端点和右端点,再与 N 比较大小即可求出这颗子树的答案;其次考虑与 X 同一个父亲的节点,按照前面求子树的方法求它的答案;原创 2023-09-25 15:14:51 · 184 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 300(E)
给一个 N,然后投色子,筛到每个数(即 1 - 6)的概率均等,把所筛到的数一个个相乘,直到 T = N 的概率是多少。dp[x] 表示,从 x 到 N 的概率是多少。原创 2023-09-22 21:46:31 · 170 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 309(E)
用 next[i] 表示从 i 出发,还能覆盖多少代保险。假设 x 是 i 的下一个节点,那么 next[x] = Max(next[x], next[i] - 1)。一个家庭有 N 个人,根节点为 1,给出 2 ~ N 的父节点。一共购买 M 次保险,每次给出 Xi Yi,使得 Xi 和它之后的 Yi 代人都有保险。问一共有多少人获得保险?该解法的核心思想就是,当前处理的点,有且仅有一条回到根节点的路线,也因此可以将其当作一维前缀和来处理。只要当前节点的 next >= 0,就能让 ans ++。原创 2023-09-21 13:01:50 · 97 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 317(E)
有四种箭头 ^、>、<、v 和一种障碍 #,箭头所指向的方向回生成一路障碍直到遇到另一个障碍或者箭头。,随后遍历所有箭头和障碍,根据箭头方向在某行或者某列上,二分查找。显然难点在于如何生成箭头的障碍。我们可以为每一列和每一行都记录上。找到区间后维护一个二维前缀和。问 S 到 G 的最短路径。原创 2023-09-21 10:05:53 · 81 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 319(E)
注意到 Pi 的范围是 [1, 8],假设 现在有 P1 = 2、P2 = 3,那么当 nowTime = 6 时,这两个站就会同时发车,然后每 6 时间,就会同时发车。而 [1, 8] 的最小公倍数是 840,所以,我们只需要设 0~839 为每一种在第一个站台开始等待的情况,对每一种情况做一次模拟,最后询问时就可以直接获得答案。每个站的发车时间是 Pi 的倍数,从家到第 1 个站需要 X 时间,从第 N 个站到另一个家要 Y 时间。原创 2023-09-19 09:19:15 · 89 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 320(E)
用一个 set<int> st1 保存队伍中的人,用一个 set<pair<int, int>> st2 保存暂时被移除的人以及他回归的时间(时间作为 first)。那么,当一个时间发生时,先判断 st2 内是否有可以放回 st1 的人,然后判断 st1 是否还有人。如果 st1 还有人,则取出第一个,令其获得面条,然后移除即可。每个事件在 t 秒时会产生 w 的面条,此时编号最小的人获得该面条,但是也需要在 s 秒后才能回到原来的位置。有 N 个人和 M 个事件,每个人有自己固定的编号。原创 2023-09-17 20:46:32 · 106 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 304(E)
那么我们只需要记录所有的点属于哪一个集合,以及 K 组点对中的两个点 {Xi,Yi} 代表的集合 {Ai,Bi},就可以在添加边的时候,通过判断连接的两个点是否在 {Ai,Bi} 中,即可得到答案。此时我们再观察样例一的输出,比如添加 2 - 5 这条边,就会将 {1,2,3}、{4,5} 连通,使得满足了 K 组点对中的某一个通路,则错误。我们首先把自环和重边忽略(反正是无向图),观察样例一,那么就会得到三个强连通分量:{1,2,3}、{4,5}、{6}。给一个有自环、重边的无向图。原创 2023-08-22 15:18:29 · 143 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 314(E)
有 N 个转盘,每次转动转盘可以获得点数,目标至少获得 M 点。每个转盘转动需要 Ci 元,每个转盘有 Pi 个点数,点数为 Sij,等概率获得。求至少获得 M 点的最小期望值。原创 2023-08-18 20:32:18 · 110 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 312(A~E)
基于此,我们定义 dp[i][j] 为,前 i 个字符中,左括号数量为 j 个的合法方案数。当 s[i] = '(' 时,可以直接转移;当 s[i] = ')' 时,需要判断当前的左括号数量是否大于等于右括号数量。最后就是输出 dp[n][n / 2]。原创 2023-08-11 15:29:52 · 168 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 310(A~E)
我们发现,[1,2]、[3] 和 [3]、[1、2] 是同一种方式,但 [1,3]、[2] 和 [1,2]、[3] 显然不是同一种。还有最后一个问题,排列组合问题会有回溯,回溯就会将当前递归的运动员弹出某个队伍,也就有可能导致该队伍没有人,即违反了题目要求,此时要 return。其中,dp[i][0] 表示当前第 i 个位置有多少个以0结尾的字符串,dp[i][1] 表示当前第 i 个位置有多少个以 1 结尾的字符串。其中,[1,2]、[3] 和 [3]、[1、2] 是同一种方式。的复杂度,所以要剪枝。原创 2023-08-10 11:32:46 · 57 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 311(A~E)
我们发现一个holeless square是一个三元组(i,j,n),它是以(i,j)为左上角的一个正方形。:可以发现,当随着n的不断增大,覆盖到的hole的数量一定是非严格递增的,所以当能覆盖到第一个hole的时候,这个n就是我们要的答案,也就是说,可以。'.'代表可行走,'#'代表不可行走,起始位置为(2,2),每次可以选择一个方向,沿着这个方向行走,知道碰到墙,问最多能走过多少个'.'。遍历四个方向,出发前检测一次,沿着一个方向走,每走一步又检测一次,若下一步会撞墙,则结束行走。原创 2023-07-23 11:32:02 · 264 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 307(A~E)
有n个人排成一个环,有m个不同的数字[0, m - 1],问有多少种分配方案使得相邻两个人的数字不同。给出三个字符矩阵a、b、x,将a、b摆放到一个空白的矩阵上,求能否用x将a、b带来的所有黑格子覆盖。给一个包含 '(' 和 ')' 的字符串,可以将匹配括号内的内容全部删去,问最后的字符串长啥样。(1)对于a,是否在a的范围内,a提供在这个点的块,是不是黑色;(2)对于b,是否在b的范围内,b提供在这个点的块,是不是黑色;如果是线性的,那么第一个人是m种,往后都是m - 1种,则有。原创 2023-07-07 15:30:14 · 231 阅读 · 0 评论 -
[补题记录] Atcoder Beginner Contest 308(C~E)
因为 MEX 的顺序固定,因此考虑以 E 作为出发点,假设数组 a 中仅有 1,那么每个 E 的位置能贡献的答案就是 ans += M_pre * X_rep * Mex(1, 1, 1),即 前缀M的数量 × 后缀X的数量 × 1。给一个n * m的矩阵,由小写字母组成,问是否能从(1,1)走到(n,m)。但是该题数组 a 中包含 0、1、2,那么只需要对 M 和 X 都多考虑 0 和 2 的情况即可,也就是多维护两个前缀 {M, 0}、{M, 2} 和两个后缀 {X, 0}、{X, 2}。原创 2023-09-20 08:57:39 · 249 阅读 · 0 评论