信息学竞赛中的对拍

需要文件及其含义:

  • 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.exestd.exeme.exe)然后运行对拍脚本就可以了。

posted @ 2022-10-28 09:23  quanjun  阅读(115)  评论(0编辑  收藏  举报