特殊题目代码格式及大样例对拍方式。
交互
I/O 交互
和普通代码一样,但每次输出后需要清空缓冲区。
每次输出后需要加上 fflush(stdout) 或使用 endl 换行。
函数式交互
最常考的交互题类型。
函数式交互题不需要实现 main 函数,只需要实现题目中要求函数即可,允许定义新函数。题目通常出现:
选手不需要,也不应该实现
main函数。
以 省选联考 2026 星图(starmap) 为例(注意洛谷评测要求与 CCF 评测要求不同):
代码中需要引入题目要求的头文件,以及算法中需要用到的头文件,如本题中代码需要引入头文件:
cpp
#include <bits/stdc++.h>
#include "starmap.h" // 题目中要求头文件
选手需要实现题目中的函数,也可以调用题目给定的函数,如以下代码合法:
cpp
#include <bits/stdc++.h>
#include "starmap.h"
using namespace std;
void init(int c, int t) {
return;
}
void starmap(int n, int m, int k, int p, vector<int> u, vector<int> v) {
report(6);
invert(vector<int>{1, 3});
invert(vector<int>{1, 4});
invert(vector<int>{2, 4});
invert(vector<int>{3, 4});
}
注意,选手不需要也不应该添加 freopen。
题目下发文件通常有大样例、grader.cpp 和后缀为 .h 的头文件,可能有代码示例 templace.cpp 文件。
如本题文件包含:
其中:
- .h 头文件(starmap.h)通常会声明选手及 grader.cpp 中的函数,选手不需要知道头文件中具体内容。
- grader.cpp 会提供框架以及选手需要调用的函数,并调用选手文件(starmap.cpp)中的函数,选手通常不需要知道 grader.cpp 的具体实现。
- templace.cpp(templace_starmap.cpp)会提供选手代码示例。
- .in/ans 文件为大样例。
具体编译及对拍方法:
首先需确认系统是否添加 g++ 至环境变量,打开 powershell,输入 g++ --version,若显示版本号等内容,则已添加,进行下一步即可。
若显示:
g++ : 无法将"g++"项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
则未添加。需要添加编译器路径至环境变量。
首先找到编译器路径,通常可选用 Dev-C++ 自带编译器,找到 Dev-C++,右键图标,选择打开文件所在位置。在打开的文件夹中,打开 MinGW64 文件夹,再打开 bin 文件夹,此时应显示:
复制该文件夹路径。
接下来搜索编辑系统环境变量,点击环境变量,显示:
点击系统变量中的 Path(图片中蓝色部分),点击下方的编辑,点击新建,将刚才的路径复制上去,一直点击确定即可。
(以下内容均为本题的示例,请用实际名称等替换示例。)
配置好后,先在 powershell 中打开题目所在文件夹,即:
输入:
g++ starmap.cpp grader.cpp -o starmap -std=c++14 -O2 -static
运行后,会在文件夹下生成一个可执行文件 starmap.exe,在 powershell 中输入:
./starmap.exe
后,可以输入数据,代码会给出输出。
关于大样例:
通常有两种方法:
第一种是在 grader.cpp 中添加 freopen,进行读入文件。
第二种是在 powershell 中输入:
cmd /c "starmap.exe < starmap1.in > starmap.out"
starmap.out 即输出文件。
但这种方式借用 cmd 进行文件重定向,所以直接使用 cmd 更为方便。打开 cmd,进入当前文件路径,输入:
starmap.exe < starmap1.in > starmap.out
即可,starmap.out 即输出文件。
Special Judge
在写好代码后,假如运行大样例 \(1\),产生输出文件。为方便称输入为 xxx1.in,答案为 xxx1.ans,选手输出为 xxx.out。
在下发文件中,找到 checker.cpp 并编译。
打开 cmd,进入当前文件夹路径,输入:
checker.exe xxx1.in xxx.out xxx1.ans
checker.exe 会返回评测结果。