众所周知,在\(oi\)学习以及考试中,对拍是一件非常重要的事。

有了对拍后,我们可以利用它发现代码上的一些非常难看出来的错误。

编写对拍程序一般有两个办法。

方案一

编写一个对拍的\(cpp\),并且利用文件操作和\(fc\),进行输出答案的判断。\(fc\)是系统的函数,可以判断两个文件是否一致。

注意:一定要将所有的\(cpp\)和\(exe\)放置到一个文件夹

对拍代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int Case=0;
  4. int main() {
  5. while(1) {
  6. system("Make_date.exe");
  7. system("Ac.exe");
  8. double st=clock();
  9. system("Wa.exe");
  10. double ed=clock();
  11. printf("第%d个测试点:",++Case);
  12. if(system("fc Ac.out Wa.out"))return !puts("Wrong Answer");
  13. printf("Accept,耗时:%.3fms\n",ed-st);
  14. }
  15. }

数据生成器如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int Random(int n){
  4. return rand()*rand()%n;
  5. }
  6. int main() {
  7. srand(time(0));
  8. freopen("data.in","w",stdout);
  9. //主程序生成。。。
  10. }

WA代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. #define reg register
  7. #define rep(a,b,c) for(reg int a=(b),a##_end_=(c); a<=a##_end_; ++a)
  8. #define ret(a,b,c) for(reg int a=(b),a##_end_=(c); a<a##_end_; ++a)
  9. #define drep(a,b,c) for(reg int a=(b),a##_end_=(c); a>=a##_end_; --a)
  10. #define debug(x) cerr<<#x<<" = "<<x<<" ";
  11. #define LL long long
  12. inline int Read() {
  13. int res=0,f=1;
  14. char c;
  15. while(c=getchar(),c<48||c>57)if(c=='-')f=0;
  16. do res=(res<<3)+(res<<1)+(c^48);
  17. while(c=getchar(),c>=48&&c<=57);
  18. return f?res:-res;
  19. }
  20. template<class T>inline bool Min(T &a,T const&b) {return a>b?a=b,1:0;}
  21. template<class T>inline bool Max(T &a,T const&b) {return a<b?a=b,1:0;}
  22. const int N=1e5+5,T=1<<22;
  23. int main() {
  24. freopen("data.in","r",stdin);
  25. freopen("Wa.out","w",stdout);
  26. // 错误代码。。。
  27. }

AC代码:

  1. #include<cstdio>
  2. #include<set>
  3. #include<algorithm>
  4. using namespace std;
  5. int main() {
  6. freopen("data.in","r",stdin);
  7. freopen("Ac.out","w",stdout);
  8. // AC代码。。。
  9. }

不过,这个方法最为麻烦的事情就是文件操作极其烦人。

每次不能直接复制粘贴,还要编译运行。

那么,另一种方法就出现了。。

方法二

利用windows环境下的批处理进行对拍。

怎么利用批处理文件对拍呢?

首先,我们要先新建一个后缀为\(.bat\)的文件。

然后将下列代码复制进去就行了,不用文件操作直接双击即可。

代码如下:

  1. @echo off
  2. :loop
  3. Make_data.exe>data.in //随机样本
  4. Ac.exe<data.in>Ac.out //正确代码
  5. Wa.exe<data.in>Wa.out //测试代码
  6. fc Ac.out Wa.out
  7. if not errorlevel 1 goto loop
  8. pause
  9. goto loop

\(update.in——2019.11.13\)

这里再附上一个同样原理的\(c++\)编写的对拍程序,利用我们熟知的\(c++\)代码,可以使我们的对拍更加的多样和细致。

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int tot=0;
  5. while(1) {
  6. system("Make_data.exe >date.in");
  7. system("AC.exe <date.in >AC.out");
  8. double st=clock();
  9. system("WA.exe <date.in >WA.out");
  10. double ed=clock();
  11. if(!system("fc AC.out WA.out"))printf("第%d个测试点:Accepted,用时:%.2lfms\n",++tot,ed-st);
  12. else {
  13. printf("第%d个测试点:Wrong Answer \n",++tot);
  14. break;
  15. }
  16. }
  17. return 0;
  18. }

关于c++对拍的办法的更多相关文章

  1. 现代软件工程讲义 如何提出靠谱的项目建议 NABCD

    互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代. 你有很多机会做出影响世界的产品,  但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了-  那么 ...

  2. ACM程序对拍

    有时候在OJ刷题目的时候,总是会遇到不知名bug,题目总不能AC,自己测试的一些数据又都能得出正确的结果,又或是直接暴力会TLE,改了算法,但是仍然WA,这时候进行程序对拍测试数据不失为一个好办法.程 ...

  3. 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 ...

  4. ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法

    ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法 前几天卸掉了用了好多年的Windows,安装了Ubuntu12.04,就开始各种搭环境.今天装好了MySQ ...

  5. the service mysql56 was not found in the Windows services的解决办法

    mysql无法启动,无法改变状态-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn.net/topics/390943788   具体描述: 关闭,重启mysql ...

  6. 食物卡喉别拍背部!救了100多万人性命的“海姆立克急救法"

    先讲三个事例: 一.近日,浙江金华一个17月大的小贝边玩边吃花生,被噎住.10多分钟后,奶奶发现小贝大口喘气,以为他玩累了就抱他回家,等父母赶到送医已晚.小贝大脑受损严重-父母含泪同意放弃治疗,孩子走 ...

  7. [C#技术参考]在PictureBox 中绘图防止闪烁的办法

    开篇之前说点别的,马上年终了,好希望年终奖大大的,但是好像这次项目的展示很重要,所以这几天绷得比较近,但是真的没有感觉烦,就是害怕来不及.所以抓紧了.下面直接正题.说一下用到的东西,都是Google搜 ...

  8. 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 ...

  9. Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)

    前言 大家在搭建hadoop集群时,第一次格式化后,一路要做好快照.别随便动不动缺少什么进程,就来个格式化. 问题描述:启动hadoop时报namenode未初始化:java.io.IOExcepti ...

随机推荐

  1. python 文件定位

    tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后. seek(offset [,from])方法改变当前文件的位置.Offset变量表示要移动的字节数.F ...

  2. c语言 - 关键字const的作用

    const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. 1.const char * p1;              //表示p1指向了的字符串不可更改 2.char const ...

  3. create-react-app 构建的项目使用 css module 方式来书写 css

    先 yarn eject 释放出来配置文件具体参见我之前写过相关的文章(这里不再重复), 找到 config 文件夹下的文件如下图所示: 找到如图所示的配置: 书写 css 的文件名例如(App.mo ...

  4. AtCoder4351 Median of Medians 二分, 树状数组

    题目大意 定义一个从小到大的数列的中位数为第 $ \frac{n}{2}+1 $ 项.求一个序列的所有连续子序列的中位数的中位数. $ (n \leqslant 100000)$ 问题分析 由于\(n ...

  5. Acwing:137. 雪花雪花雪花(Hash表)

    有N片雪花,每片雪花由六个角组成,每个角都有长度. 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6. 因为雪花的形状是封闭的环形,所以 ...

  6. Python中的不可变对象类型与可变对象类型

    https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...

  7. iview简单使用+按需加载组件的方法(全局和局部)

    1,简单使用 vue项目中使用iview非常简单: 首先安装依赖: $ npm install iview --save 会安装最新版本的依赖,安装完成后package.json会出现如下图配置 表示 ...

  8. API网络数据安全

    前言 个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的服务,在保证稳定的情况下,我们的网络数据交互也达到了一个很高的级别,今天给大家分享的是网络数据安全的常用方法 简介 TCP/I ...

  9. 关于MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. 例如: CREATE TABLE `employee_tbl` ( `id` ...

  10. C++二维数组名的再探索

    #include <iostream> int main() { ][] = { , , , , , , , , , , , }; //输出 0,1,2,3,4,5,6,7,8,9,10, ...