完成对拍我们需要新建一个文件夹 里面有这些文件
bf是暴力写法
gen是随机生成数据用的
std是理论上的正解
对拍的目的就是
考试时不确定你的”正解“算法能得多少分
而你能基本确保你的暴力写法正确的情况下
生成数据判断正确性
下面我们以a + bproblem举例
1.我们的bf.cpp
1 #include2 using namespace std; 3 typedef long long ll; 4 5 int s, a, b; 6 7 int main() { 8 freopen("input.txt", "r", stdin); 9 freopen("bf.out", "w", stdout);10 11 cin >> a >> b;12 13 for (int i = 1; i <= a + b; ++i) 14 s++;15 16 cout << s;17 return 0;18 }
算是暴力了。。。
2.我们的gen.cpp
1 #include2 using namespace std; 3 4 int bigrand() { 5 return (rand() * 32768 + rand()); 6 } 7 8 int main() { 9 freopen("input.txt", "w", stdout);10 11 srand(time(0));12 13 cout << bigrand() % 100000 << ' ' << bigrand() % 100000;14 15 return 0;16 }
bigrand()函数可以随便写 目的就是使随机的数变大 取模%可以确定范围
3.我们的std.cpp
1 #include2 using namespace std; 3 4 int a, b; 5 6 int main() { 7 freopen("input.txt", "r", stdin); 8 freopen("std.out", "w", stdout); 9 10 cin >> a >> b;11 12 cout << a + b;13 14 return 0;15 }
目测是没错的
4.小总结
是的
这样
写三个cpp文件就足够了
但是一次次比对.out文件是否太烦了呢
所以我们还要学会
5.test.bat批处理 文件
右键找到编辑(win10)
1 :loop2 gen.exe3 std.exe4 bf.exe5 fc std.out bf.out6 if not errorlevel 1 goto loop7 pause
加上这段代码就可以了
:loop是循环的意思
下面三行是分别运行三个程序
fc代表比较 后面就写已生成的.out文件名
最后 if not errorlevel 1 goto loop
如果没有错误就继续循环
最后一定要写上pause
注意 缩进是必须按要求的
6.现在检验成果吧
如果我的std是对的那么
根本停不下来
如果是错的呢
就会这样
所以学会了吗。。。