对拍——竞赛用

一.对拍介绍

对拍是一种验证手段。

一般来是如下几个阶段:

  1. 生成数据。
  2. 运行暴力代码,得到结果。
  3. 运行正确代码,得到结果。
  4. 对比两个结果。

结构流程图如下:

图片描述

在windows环境,用cmd的命令行。

我们定义如下文件:

  1. chk.cpp 为验证代码,用该代码进行循环多组对拍。
  2. data.cpp 为数据生成代码,用该代码生成题目中的验证数据。
  3. force.cpp为暴力代码,用暴力方法来完成题目。
  4. std.cpp为需要验证的代码。

命令行解释:

  • C++
  1. 编译: g++ <code.cpp> -o <code.exe>,需要替换 <code.cpp> 为编译的代码名称,<code.exe> 为编译完成的可执行文件。
  2. 执行: <code.exe> < <input> > <output><code.exe> 为编译完成的可执行文件,<input> 为输入的文件,<output> 为输出的文件。
  3. 对比: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对玛导至昏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值