信息学竞赛中的对拍
需要文件及其含义:
in.cpp
:产生输入数据的源文件;std.cpp
:标程,即能产生正确数据但是会超时的源文件;me.cpp
:检查的程序,即用于提交但是不确定对不对(所以拿来对拍)的源文件;run.bat
:对拍脚本。
以下为一组示例:
run.bat
@echo off
:loop
in.exe > in.txt
me.exe < in.txt > me.txt
std.exe < in.txt > std.txt
fc me.txt std.txt
if not errorlevel 1 goto loop
pause
in.cpp
#include <bits/stdc++.h>
using namespace std;
mt19937 rng(time(NULL));
int random(int a, int b) {
return rng() % (b - a + 1) + a;
}
int main() {
int a = random(1, 100), b = random(1, 100);
cout << a << " " << b << endl;
return 0;
}
std.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
me.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a + b > 130) cout << "hehe" << endl;
else cout << a + b << endl;
return 0;
}
编译三个源文件生成对应的目标文件(in.exe
、std.exe
、me.exe
)然后运行对拍脚本就可以了。