ACM 模式简介
ACM 模式是算法竞赛和面试中常见的编程环境,要求开发者自行处理标准输入输出(IO),而不是像 LeetCode 那样仅实现函数接口。掌握 IO 处理是解决此类问题的基础。
1. 输入处理
固定格式输入
当题目明确指定了输入的行数和格式时,可以直接使用 cin 读取。
示例:第一行三个数 x, y, z
long long x, y, z;
cin >> x >> y >> z;
注意类型选择,整数较大时使用 long long 防止溢出。
示例:前两行分别是整数 x, y
long long x, y;
cin >> x >> y; // cin 会自动跳过空白符和换行
示例:第一行一个整数 n,第二行输入 n 个整数
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
不定式输入
当输入行数不确定或需要读到文件结束(EOF)时,通常配合 getline 和 stringstream 使用。
string line;
while (getline(cin, line)) {
stringstream ss(line);
int num;
while (ss >> num) {
// 处理读取到的数字 num
}
}
这里 getline 会读取一整行直到遇到换行符。如果读到 EOF 则返回 false,循环终止。stringstream 将字符串转换为流对象,行为类似 cin,可以方便地按空格分隔解析行内数据。
2. 输出规范
输出时需注意格式细节,特别是末尾不能有多余的空格或字符,否则可能导致 Wrong Answer。
for (int i = 0; i < n; i++) {
cout << arr[i] << (i == n - 1 ? "" : " ");
}
cout << endl;

