AtCoder Beginner Contest 赛情分析及题解 | 汇总(更新至 ABC 463)
我把自己练习过的AtCoder ABC题目都整理了一下。虽然网站上有许多高手的解法,但因为我自己也是初学者,所以只用了比较容易理解的方法来分析和解答。如果你也在学习的话,希望这些内容能对你有一点帮助。
ABC 464
赛情分析
| 题号 | 题目名称 | 难度 | 考察算法 | 一句话思路总结 |
|---|---|---|---|---|
| A | Decisive Battle | ⭐ | 字符串遍历 / 计数 | 遍历字符串 \(S\) 统计字符 E 和 W 的出现次数,分别代表东军和西军士兵人数,直接比较两个计数器大小输出 East 或 West,由于字符串长度为奇数保证结果必不相等,时间复杂度 \(O(|S|)\),空间复杂度 \(O(1)\)。 |
| B | Crop | ⭐⭐ | 模拟 / 二维数组边界裁剪 | 分别从上、下、左、右四个方向扫描二维图像,用标记数组记录需要移除的全白行/列,最后输出未被标记的像素即可;更简洁的做法是直接预处理出包含黑色像素的最小行区间和最小列区间,只输出该区间内的像素,时间复杂度 \(O(H \times W)\),空间复杂度 \(O(H \times W)\)。 |
| C | Plumage Palette | ⭐⭐⭐ | 双指针 + 哈希表(map) |
将所有鸟按变色天数 \(D_i\) 升序排序,用 map 维护当前各颜色的鸟的数量,初始时所有鸟为颜色 \(A_i\);然后用双指针遍历天数 \(i=1 \sim M\),对于每一天将所有 \(D_j = i\) 的鸟从颜色 \(A_j\) 改为 \(B_j\)(对应 map 中计数减1/加1,计数为0时删除),每天输出 map.size() 即为当天颜色种类数,时间复杂度 \(O(N \log N + M + N \log N)\)(排序 + 遍历 + map 操作),空间复杂度 \(O(N)\)。 |
| D | Celester | ⭐⭐⭐ | 线性DP(一维状态转移) | 定义 \(dp[i][0/1]\) 表示第 \(i\) 天最终为雨天(0)/晴天(1)时的最大幸福值,初始状态根据是否改变第1天天气确定,然后按天递推:\(dp[i][j] = \max_{k \in \{0,1\}}(dp[i-1][k] + cost(j) + gain(k,j))\),其中 \(cost(j)\) 为改变天气的代价(\(0\) 或 \(-X_i\)),\(gain(k,j)\) 为若 \(k=0\) 且 \(j=1\) 则获得 \(Y_{i-1}\) 收益,最终答案为 \(\max(dp[n][0], dp[n][1])\),时间复杂度 \(O(T \times N)\),空间复杂度 \(O(N)\)。 |
| E | Fill-Rect Query | ⭐⭐⭐ | 逆向DP / 后缀最大值传播 | 由于每次操作都是覆盖以 \((1,1)\) 为左上角的矩形,格子 \((i,j)\) 的最终颜色由所有满足 \(R_k \ge i\) 且 \(C_k \ge j\) 的操作中编号最大的那个决定;将每次操作仅记录在其右下角 \((R_k, C_k)\),然后从右下角向左上角做二维DP:\(a[i][j] = \max(a[i][j], a[i+1][j], a[i][j+1])\),\(a[i][j]\) 即为覆盖 \((i,j)\) 的最后操作编号,输出对应字符即可,时间复杂度 \(O(H \times W + Q)\),空间复杂度 \(O(H \times W)\)。 |
| F |
题目
题解:洛谷 AT_abc464_a Decisive Battle
题解:洛谷 AT_abc464_c Plumage Palette
题解:洛谷 AT_abc464_e Fill-Rect Query
ABC 463
赛情分析
| 题号 | 题目名称 | 难度 | 考察算法 | 一句话思路总结 |
|---|---|---|---|---|
| A | 16:9 | ⭐ | 模拟 / GCD | 用最大公约数将宽高比化简,判断是否等于 \(16:9\)。 |
| B | Train Reservation | ⭐ | 模拟 | 遍历所有列车,检查目标列 \(X\) 是否存在至少一个 o。 |
| C | Tallest at the Moment | ⭐⭐ | 排序 + 二分 + 后缀最大值 | 按离开时间排序后预处理后缀最大身高,对每个查询二分找到第一个未离开的位置,取后缀最大值。 |
| D | Maximize the Gap | ⭐⭐⭐ | 整数二分 + 贪心判定 | 按右端点排序后二分答案,贪心验证是否能选出 \(K\) 块两两不重叠且间距至少为 \(mid\) 的布。 |
| E | Roads and Gates | ⭐⭐⭐⭐ | Dijkstra + 虚拟节点 | 传送门两两之间的完全图通过虚拟节点拆分为 \(O(N)\) 条边,再跑 Dijkstra 求最短路。 |
| F | Senshuraku | ⭐⭐⭐⭐⭐ | 组合概率 + 分类讨论 | 枚举 \(N\) 场比赛结果,利用组合数计算"最大值选手中均匀随机选冠军"的概率,对 \(998244353\) 取模。 |
题目
题解:洛谷 AT_abc463_b Train Reservation
题解:洛谷 AT_abc463_c Tallest at the Moment
题解:洛谷 AT_abc463_d Maximize the Gap
浙公网安备 33010602011771号