正在加载
第一次写算法题?新手入门指南带你从输入输出写到第一个 Accepted
正在加载
从零写到第一个 Accepted
如果你是第一次做算法题,这一页会带你从「读入数据」写到第一个 Accepted。
每道题包含这几部分:
你要写的程序,就是一个「读输入 → 算 → 写输出」的完整程序。 它会被编译后运行,喂进若干组测试数据,输出与标准答案逐一比对。
假设题目是「读入两个整数 a 和 b,输出它们的和」。
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
a, b = map(int, input().split())
print(a + b)
就这么简单 —— 不需要写任何和网站交互的代码,也不需要打开文件。 标准输入输出就是全部。
拿到 AC 说明全部测试点都通过了。其它结果的含义:
| 结果 | 意思 | 先检查什么 |
|---|---|---|
| WA | 答案错误 | 算法逻辑、边界情况 |
| PE | 格式错误 | 答案对了,空格/换行不对 |
| TLE | 超时 | 复杂度太高,或死循环 |
| MLE | 超内存 | 数组开太大 |
| RE | 运行时错误 | 数组越界、除以零、爆栈 |
| CE | 编译错误 | 语法写错了 |
完整说明见评测规则。
int a = 2000000000, b = 2000000000;
cout << a + b; // 溢出!结果是负数
long long c = (long long)a + b; // 正确
判断方法:结果可能超过 21 亿(2×10⁹)吗?超过就用 long long。
int cnt[100];
while (T--) {
// 忘了这一行,上一组的数据会污染这一组
memset(cnt, 0, sizeof(cnt));
// ...
}
题目说 n ≤ 100000,你开了 int a[1000] —— 数组越界,通常报 RE,
但也可能悄悄给出错误答案(更难查)。
习惯:按题目上限开,再多留一点余量。数组开大一点没人会笑话你。
时间限制 1 秒,大致能跑 10⁸ 次基本运算。
| n 的范围 | 可行的复杂度 |
|---|---|
| n ≤ 20 | O(2ⁿ) 指数级 |
| n ≤ 500 | O(n³) |
| n ≤ 5000 | O(n²) |
| n ≤ 10⁶ | O(n log n) |
| n ≤ 10⁸ | O(n) |
看到 n ≤ 100000 还想写两重循环?那是 10¹⁰ 次运算,必然 TLE。
数据量大(10⁵ 以上)时,cin 可能成为瓶颈。加上这两行:
ios::sync_with_stdio(false);
cin.tie(nullptr);
注意:加了之后不要再混用 scanf/printf。
去题库,按难度筛选「入门」,从通过率高的开始做。 首页的「随机一题」也可以,但新手建议先按难度顺序来。
做不出来很正常 —— 卡住的时候先想想: 样例是怎么算出来的?我的思路在样例上能走通吗?