1. AT_abc403模拟赛参赛全记录
作为一名算法竞赛爱好者,我参加了上周的AT_abc403模拟赛。这是一场由AtCoder平台举办的常规ABC级别比赛,适合算法入门到中级水平的选手参与。整场比赛持续100分钟,包含8道题目(A-H题),难度从最简单的语法题到需要一定算法思维的题目都有覆盖。下面我将详细记录我的解题过程、遇到的坑点以及赛后复盘心得。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 赛前准备与环境配置
2.1 开发环境搭建
我使用的是Ubuntu 22.04系统,配置了以下竞赛常用工具:
- VSCode作为主编辑器,安装了Competitive Programming Helper插件
- 自定义的C++模板,包含快速IO和常用宏定义
- 本地测试脚本,支持自动编译和样例测试
提示:提前准备好测试脚本能节省大量时间。我的脚本会在文件保存时自动编译,并通过快捷键运行测试用例。
2.2 比赛策略规划
根据以往经验,ABC级别比赛通常:
- A-C题:基础语法题,目标10分钟内解决
- D-E题:简单算法题(贪心、二分等),每道20分钟
- F-H题:中等难度算法题(DP、图论等),根据剩余时间选择
我给自己设定的目标是至少完成前6题,争取在F题有所突破。
3. 题目解析与解题过程
3.1 A题 - 字符串处理基础
题目要求:给定两个字符串S和T,判断T是否以S开头。
我的解法:
cpp复制#include <bits/stdc++.h>
using namespace std;
int main() {
string S, T;
cin >> S >> T;
cout << (T.starts_with(S) ? "Yes" : "No") << endl;
}
踩坑点:
- 最初使用了
T.substr(0, S.size()) == S的写法,虽然正确但不够直观 - C++20的
starts_with方法更简洁,但需要确认编译器支持
3.2 B题 - 二维数组操作
题目给出一个N×N的网格,要求执行特定填充操作后输出结果。
关键步骤:
- 分析填充规则:对角线附近区域填特定字符
- 使用双重循环遍历网格
- 根据曼哈顿距离判断填充条件
cpp复制for(int i=0; i<2*N-1; i++) {
for(int j=0; j<2*N-1; j++) {
int dist = abs(i-(N-1)) + abs(j-(N-1));
cout << (dist <= K ? 'X' : '.');
}
cout << endl;
}
3.3 D题 - 贪心算法应用
题目描述了一个物品购买问题,需要最大化购买数量。
解题思路:
- 将物品按价格排序
- 使用双指针技巧,从两端开始购买
- 维护当前总花费,确保不超过预算
cpp复制sort(A.begin(), A.end());
int l = 0, r = N-1, ans = 0;
while(l <= r) {
if(A[l] + A[r] <= X) {
l++;
r--;
} else {
r--;
}
ans++;
}
4. 比赛中的典型错误与调试
4.1 数组越界问题
在解决E题时,我遇到了段错误。经过排查发现:
错误代码:
cpp复制int dp[MAX_N];
// ...
for(int i=1; i<=N; i++) {
dp[i] = max(dp[i], dp[i-1] + A[i]);
}
问题原因:
- 数组声明为
MAX_N但循环到N,当N=MAX_N时越界 - 修正方法:将数组大小改为
MAX_N+1
4.2 整数溢出陷阱
F题的一个隐蔽bug:
cpp复制int res = 1;
for(int i=0; i<N; i++) {
res *= A[i] % MOD; // 可能溢出
}
正确做法:
cpp复制long long res = 1;
for(int i=0; i<N; i++) {
res = res * (A[i] % MOD) % MOD;
}
5. 赛后复盘与提升计划
5.1 时间分配分析
| 题目 | 计划时间 | 实际时间 | 差距原因 |
|---|---|---|---|
| A | 3min | 2min | - |
| B | 7min | 12min | 边界条件考虑过多 |
| C | 5min | 4min | - |
| D | 15min | 22min | 贪心策略验证耗时 |
| E | 25min | 未完成 | 调试时间不足 |
5.2 待加强知识点
根据本次比赛暴露的弱点,我需要重点提升:
- 动态规划的状态设计能力
- 图论算法的模板熟练度
- 复杂边界条件的快速识别
5.3 训练计划调整
- 每日至少完成3道rated题目
- 每周专题训练(当前重点:树形DP)
- 参加更多虚拟比赛模拟实战环境
这次比赛让我深刻认识到,算法竞赛不仅是知识储备的比拼,更是心理素质和调试能力的考验。特别是在时间压力下,保持清晰的思路和高效的调试能力至关重要。建议新手从ABC的前几题开始练习,逐步建立解题信心和节奏感。
