最简单易懂的对拍讲解

 

完成对拍我们需要新建一个文件夹 里面有这些文件

bf是暴力写法

gen是随机生成数据用的

std是理论上的正解

 

对拍的目的就是

考试时不确定你的”正解“算法能得多少分

而你能基本确保你的暴力写法正确的情况下

生成数据判断正确性

 

下面我们以a + bproblem举例

1.我们的bf.cpp

 1 #include <bits/stdc++.h>
 2 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 #include <bits/stdc++.h>
 2 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 #include <bits/stdc++.h>
 2 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 :loop
2    gen.exe
3    std.exe
4    bf.exe
5    fc std.out bf.out
6 if not errorlevel 1 goto loop
7 pause

加上这段代码就可以了

:loop是循环的意思     

下面三行是分别运行三个程序

fc代表比较 后面就写已生成的.out文件名

最后 if not errorlevel 1 goto loop 

如果没有错误就继续循环

最后一定要写上pause

注意      缩进是必须按要求的

 

 

6.现在检验成果吧

 

如果我的std是对的那么

根本停不下来

 

如果是错的呢

就会这样

 

 

所以学会了吗。。。

posted @ 2019-07-09 00:05  euix  阅读(356)  评论(0编辑  收藏  举报