一.对拍介绍
对拍是一种验证手段。
一般来是如下几个阶段:
- 生成数据。
- 运行暴力代码,得到结果。
- 运行正确代码,得到结果。
- 对比两个结果。
结构流程图如下:
在windows环境,用cmd的命令行。
我们定义如下文件:
chk.cpp
为验证代码,用该代码进行循环多组对拍。data.cpp
为数据生成代码,用该代码生成题目中的验证数据。force.cpp
为暴力代码,用暴力方法来完成题目。std.cpp
为需要验证的代码。
命令行解释:
- C++
- 编译:
g++ <code.cpp> -o <code.exe>
,需要替换<code.cpp>
为编译的代码名称,<code.exe>
为编译完成的可执行文件。 - 执行:
<code.exe> < <input> > <output>
,<code.exe>
为编译完成的可执行文件,<input>
为输入的文件,<output>
为输出的文件。 - 对比:
fc <out1> <out2>
,<out1>
和<out2>
为需要对比的两个文件。
二.Dev C++怎么添加环境变量
1.首先找到dev c++的目录,然后进到 MinGW64 的 bin 里.
把这个路径复制下来。
2.搜索编辑系统环境变量,然后点环境变量,双击进入系统变量的path,点击新建,把刚才拷贝的路径复制进去,然后确定,返回。
3.打开cmd命令行,输入g++ -v,若出现下图,则配置成功了。
三.cmd基础知识
1.编译与运行
选中地址之后输入cmd,就会在该路径下打开命令行,
2.输入输出重定向
3.对比结果 (fout是暴力结果,sout是算法结果)
四.代码实现
1.check代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
system("g++ data.cpp -o data.exe --std=c++11"); //先全都编译一边
system("g++ force.cpp -o force.exe --std=c++11");
system("g++ std.cpp -o std.exe --std=c++11");
int rp;
while(1)
{
system("data.exe > input.txt"); //生成数据
system("force.exe < input.txt > fout.txt"); //把input数据输入到程序中,结果存在fout中
system("std.exe < input.txt > sout.txt");
rp=system("fc fout.txt sout.txt"); //对比
if(rp==0) //正确
{
cout<<"ac"<<'\n';
}
else
{
cout<<"wa"<<'\n';
break;
}
}
return 0;
}
就算有多个程序,也可以直接在后面加上,然后一起验证。
2.data代码
#include<bits/stdc++.h>
using namespace std;
mt19937 gen(time(0)); //mt 1993 7 ,gen是生成随机数的函数
int main()
{
int a,b;
a=gen()%100;
b=gen()%100;
cout<<a<<' '<<b<<'\n';
return 0;
}