对拍
2026-10-04 20:52:06
发布于:湖北
1.对拍是个好东西
核心原理:用一份已知逻辑正确、但运行效率低下的暴力代码,和你编写的不知对错的新代码,同时接收大量随机生成的测试数据,比对两者的输出结果。如果输出不一致,就能立刻定位到导致错误的测试用例,快速排查隐蔽的逻辑漏洞、边界条件错误等问题。
但是,这该如何实现呢
2.实现方法
一般我们会在windows系统下调试代码
所以要先学会#include<windows.h>
示例代码
#include <windows.h>
using namespace std;
int main() {
while (1) {
printf("Testing case #%d... ", 10000 - t);
// 1. 生成随机数
system("data.exe > data.txt");
// 2. 运行暴力代码
system("baoli.exe < data.txt > baoli.txt");
// 3. 运行待测程序(你的代码)
system("std.exe < data.txt > std.txt");
// 4. 比对结果
if (system("fc baoli.txt std.txt")) {
// 暂停程序,查看错误
system("pause");
return 0; // 发现错误,立即退出
}
}
return 0;
}
但是,考试中用的是Linux系统,只能用下一种写法
#include<bits/stdc++.h>
using namespace std;
int main(){
while(true){
system("./data >data.in");
system("./a <data.in >a.out");
system("./b <data.in >b.out");
if(system("diff a.out b.out")){
cout<<"Wrong Answer."<<endl<<endl;
return 0;
}else{
cout<<"Accepted."<<endl<<endl;
}
}
return 0;
}
3.注意事项
1.对拍的前提是要有两份代码
2.对拍的结果不一定对(两份代码错一块去了也有可能)
祝大家csp-j&s rp++
全部评论 1
有写错了的地方,请指出
2天前 来自 湖北
0

















有帮助,赞一个