关于c++对拍的办法
众所周知,在\(oi\)学习以及考试中,对拍是一件非常重要的事。
有了对拍后,我们可以利用它发现代码上的一些非常难看出来的错误。
编写对拍程序一般有两个办法。
方案一
编写一个对拍的\(cpp\),并且利用文件操作和\(fc\),进行输出答案的判断。\(fc\)是系统的函数,可以判断两个文件是否一致。
注意:一定要将所有的\(cpp\)和\(exe\)放置到一个文件夹。
对拍代码如下:
#include<bits/stdc++.h>
using namespace std;
int Case=0;
int main() {
	while(1) {
		system("Make_date.exe");
		system("Ac.exe");
		double st=clock();
		system("Wa.exe");
		double ed=clock();
		printf("第%d个测试点:",++Case);
		if(system("fc Ac.out Wa.out"))return !puts("Wrong Answer");
		printf("Accept,耗时:%.3fms\n",ed-st);
	}
}
数据生成器如下:
#include<bits/stdc++.h>
using namespace std;
int Random(int n){
	return rand()*rand()%n;
}
int main() {
	srand(time(0));
	freopen("data.in","w",stdout);
	//主程序生成。。。
}
WA代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define reg register
#define rep(a,b,c) for(reg int a=(b),a##_end_=(c); a<=a##_end_; ++a)
#define ret(a,b,c) for(reg int a=(b),a##_end_=(c); a<a##_end_; ++a)
#define drep(a,b,c) for(reg int a=(b),a##_end_=(c); a>=a##_end_; --a)
#define debug(x) cerr<<#x<<" = "<<x<<" ";
#define LL long long
inline int Read() {
	int res=0,f=1;
	char c;
	while(c=getchar(),c<48||c>57)if(c=='-')f=0;
	do res=(res<<3)+(res<<1)+(c^48);
	while(c=getchar(),c>=48&&c<=57);
	return f?res:-res;
}
template<class T>inline bool Min(T &a,T const&b) {return a>b?a=b,1:0;}
template<class T>inline bool Max(T &a,T const&b) {return a<b?a=b,1:0;}
const int N=1e5+5,T=1<<22;
int main() {
	freopen("data.in","r",stdin);
	freopen("Wa.out","w",stdout);
	// 错误代码。。。
}
AC代码:
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
int main() {
	freopen("data.in","r",stdin);
	freopen("Ac.out","w",stdout);
    // AC代码。。。
}
不过,这个方法最为麻烦的事情就是文件操作极其烦人。
每次不能直接复制粘贴,还要编译运行。
那么,另一种方法就出现了。。
方法二
利用windows环境下的批处理进行对拍。
怎么利用批处理文件对拍呢?
首先,我们要先新建一个后缀为\(.bat\)的文件。
然后将下列代码复制进去就行了,不用文件操作直接双击即可。
代码如下:
@echo off
:loop
    Make_data.exe>data.in  //随机样本
    Ac.exe<data.in>Ac.out //正确代码
    Wa.exe<data.in>Wa.out  //测试代码
    fc Ac.out Wa.out
if not errorlevel 1 goto loop
pause
goto loop
\(update.in——2019.11.13\)
这里再附上一个同样原理的\(c++\)编写的对拍程序,利用我们熟知的\(c++\)代码,可以使我们的对拍更加的多样和细致。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
	int tot=0;
	while(1) {
		system("Make_data.exe >date.in");
		system("AC.exe <date.in >AC.out");
		double st=clock();
		system("WA.exe <date.in >WA.out");
		double ed=clock();
		if(!system("fc AC.out WA.out"))printf("第%d个测试点:Accepted,用时:%.2lfms\n",++tot,ed-st);
		else {
			printf("第%d个测试点:Wrong Answer \n",++tot);
			break;
		}
	}
	return 0;
}
												
											关于c++对拍的办法的更多相关文章
- 现代软件工程讲义 如何提出靠谱的项目建议 NABCD
		
互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代. 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了- 那么 ...
 - ACM程序对拍
		
有时候在OJ刷题目的时候,总是会遇到不知名bug,题目总不能AC,自己测试的一些数据又都能得出正确的结果,又或是直接暴力会TLE,改了算法,但是仍然WA,这时候进行程序对拍测试数据不失为一个好办法.程 ...
 - PHP运行错最有效解决办法Fatal error: Out of memory (allocated 786432) (tried to allocate 98304 bytes) in H:\freehost\zhengbao2\web\includes\lib_common.php on line 744
		
原文 PHP运行错最有效解决办法Fatal error: Out of memory (allocated 6029312) Fatal error: Out of memory (allocated ...
 - ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法
		
ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法 前几天卸掉了用了好多年的Windows,安装了Ubuntu12.04,就开始各种搭环境.今天装好了MySQ ...
 - the service mysql56 was not found in the Windows services的解决办法
		
mysql无法启动,无法改变状态-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn.net/topics/390943788 具体描述: 关闭,重启mysql ...
 - 食物卡喉别拍背部!救了100多万人性命的“海姆立克急救法"
		
先讲三个事例: 一.近日,浙江金华一个17月大的小贝边玩边吃花生,被噎住.10多分钟后,奶奶发现小贝大口喘气,以为他玩累了就抱他回家,等父母赶到送医已晚.小贝大脑受损严重-父母含泪同意放弃治疗,孩子走 ...
 - [C#技术参考]在PictureBox 中绘图防止闪烁的办法
		
开篇之前说点别的,马上年终了,好希望年终奖大大的,但是好像这次项目的展示很重要,所以这几天绷得比较近,但是真的没有感觉烦,就是害怕来不及.所以抓紧了.下面直接正题.说一下用到的东西,都是Google搜 ...
 - Hbase出现ERROR: Can't get master address from ZooKeeper; znode data == null解决办法
		
问题描述如下: hbase(main)::> list TABLE ERROR: Can't get master address from ZooKeeper; znode data == n ...
 - Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)
		
前言 大家在搭建hadoop集群时,第一次格式化后,一路要做好快照.别随便动不动缺少什么进程,就来个格式化. 问题描述:启动hadoop时报namenode未初始化:java.io.IOExcepti ...
 
随机推荐
- https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入后如何添加到自己的项目
			
将 https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入到界面后,如何将这个项目添加到自己的项目里面. 然后再自 ...
 - 利用pdfbox和poi抽取pdf、doc以及docx格式的内容
			
使用pdfbox1.5.0抽取pdf格式文档内容,使用poi3.7抽取doc及docx文档内容: /** * Created by yan.shi on 2017/9/25. */ import or ...
 - sqli-labs(4)
			
sqli-libs(4)通关过程 0x01爱之初体验 首先我们进行注入试探 发现我们的单引号 回显事正常的 双引号回显反而是错误的 查看源码我们发现 多了一个给id赋值的语句 我们在php上面执行一下 ...
 - 如何基于String实现同步锁?
			
在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理.因为只有在相同字符串的情况下,并发操作才是不被允许的.而如果我们不分青红皂白直接全部加锁, ...
 - docker-compose常用命令(持续更新...)
			
build 构建或重建服务 help 命令帮助 kill 杀掉容器 logs 显示容器的输出内容 port 打印绑定的开放端口 ps 显示容器 pull 拉取服务镜像 restart 重启服务 rm ...
 - spark 笔记 3:Delay Scheduling: A Simple Technique for Achieving Locality and Fairness in Cluster Scheduling
			
spark论文中说他使用了延迟调度算法,源于这篇论文:http://people.csail.mit.edu/matei/papers/2010/eurosys_delay_scheduling.pd ...
 - 数据库-MongoDb
			
*本文总结下使用Mongodb遇到的问题: 1. 安装完MongoDb后先启动服务端,然后再启动客户端: 直接上图: 注意点:mongod.exe :是用来连接到mongo数据库服务器的,即服务器端. ...
 - QBXTD2上午
			
话说lyd昨天没讲完他的该死的贪心,所以今天继续讲 贪心思想是考虑AB是最快的人,CD是最慢的人,要把CD两个人送过河,只有两种方案,牵扯到四个人,并且n个规模的原问题化成了n-2个规模的子问题 那么 ...
 - 【转】C/C++ 引用作为函数的返回值
			
转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ...
 - 统计学_F分布(图文详解和python脚本实现)
			
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...