在ACM赛场上经常碰到感觉思路是对的,样例也过了,但是wa掉了,时间充足的情况下,选择换人再写一份新的代码。然后两份代码对拍。看看在哪些数据上输出了不同的结果。
对拍教程:
- 把自己的代码(my.cpp), 队友的代码(std.cpp), 产生数据的代码(rand.cpp)放在同一个文件夹下。
- 创建一个文本文件,重复名为(对拍.bat)。在文本中写入如下代码:
@echo off :loop rand.exe>data.txt std.exe<data.txt>std.out my.exe<data.txt>my.out fc my.out std.out if not errorlevel 1 goto loop pause goto loop
-
运行(对拍.bat)。会看到两份对拍代码的结果,当遇到输出结果不同时,程序运行停止,在对应文件夹下的(data.txt)中,可以查看对应的输入数据
样例:
a+b 问题, 在my.cpp中,是7的倍数时,a-1 从而造成两份代码算法上的差异。
my.cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
if(a % 7 == 0) a --;
printf("%d\n", a+b);
return 0;
}
std.cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
printf("%d\n", a+b);
return 0;
}
rand.cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
srand(time(0));
int a = rand() % 100 + 1;
int b = rand() % 100 + 1;
printf("%d %d\n", a, b);
return 0;
}
运行结果:
此时我们查看文件夹下data.txt:
这样便找出了我们所需要的输入数据