所谓对拍,就是随机生成数据,然后用一个肯定正确的暴力算法的程序,去测试一个要提交的程序。

由于比赛中一般使用 Linux 系统,所以本篇博客的代码都是 Linux 下的程序代码。

其实最简单的方式是写脚本。

这里介绍的是用选手最熟悉的 C++ 语言写对拍程序。

假设要提交的程序为 sol.cpp,暴力的程序为 bf.cpp,随机数据生成器 random.cpp。

首先编译这三个程序,得到 sol,bf,random。

一种简单的方法就是先生成数据,然后暴力程序和待测试程序分别运行,比较结果。

生成数据,输出到 data.in

  1. ./random > ./data.in

先运行暴力程序,结果输出到 data.out

  1. ./bf < ./data.in > ./data.out

然后运行待测试程序,结果输出到 data.ans

  1. ./sol < ./data.in > ./data.ans

然后比较两个结果是否相同

  1. diff ./data.out ./data.out

上述方法的缺点是无法统计时间。

于是就有了以下的对拍程序。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. for(int T = 0; T < 10000; ++T) {
  5. system("./random > ./data.in");
  6. double st = clock();
  7. system("./sol < ./data.in > ./data.ans");
  8. double et = clock();
  9. system("./bf < ./data.in > ./data.out");
  10. if(system("diff ./data.out ./ data.ans")) {
  11. puts("Wrong Answer\n");
  12. return 0;
  13. } else {
  14. printf("Accepted, 测试点 #%d, 用时 %.0lfms\n", T, et - st);
  15. }
  16. }
  17. return 0;
  18. }

将上述所有文件放在同一目录下,编译运行对拍程序就可以对拍。

参考

《算法竞赛进阶指南》 李煜东 著

ACM 中的对拍程序的更多相关文章

  1. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式

    ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...

  2. ACM对拍程序

    1.把所需对拍的代码的可执行文件a.exe b.exe放在同一目录下 2.把rand数据的代码的可执行文件c.exe放在该目录下 3.新建一个txt文件,里面添加代码,后把格式改成bat @echo ...

  3. 手把手教你写对拍程序(PASCAL)

    谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...

  4. [zt]手把手教你写对拍程序(PASCAL)

    谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...

  5. ACM 数据读写/对拍

    freopen()函数在ACM中的使用 - cfzjxz的专栏 - 博客频道 - CSDN.NET 在做acm题目的过程中,我们需要在本地机器上调试.调试过程中,如果输入数据少还可以接受,但如果输入数 ...

  6. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  7. 关于 矩阵在ACM中的应用

    关于矩阵在ACM中的应用 1.矩阵运算法则 重点说说矩阵与矩阵的乘法,不说加减法. 支持: 结合律  (AB)C = A(BC) 分配律 A(B+C) = AB + AB $\left( \lambd ...

  8. Java在ACM中的应用

    Java在ACM中的应用 —. 在java中的基本头文件(java中叫包) import java.io.*; import java.util.*; //输入Scanner import java. ...

  9. Mac OS下编写对拍程序

    介绍 对拍是信息学竞赛中重要的技巧,它通过一个效率低下但正确率可以保证的程序,利用庞大的随机生成数据来验证我们的高级算法程序.对拍最大的优势在于可以通过人力所不能及的速度和数量达到验证的效果.下面我们 ...

随机推荐

  1. 用 Flask 来写个轻博客 (32) — 使用 Flask-RESTful 来构建 RESTful API 之一

    目录 目录 前文列表 扩展阅读 RESTful API REST 原则 无状态原则 面向资源 RESTful API 的优势 REST 约束 前文列表 用 Flask 来写个轻博客 (1) - 创建项 ...

  2. Windows 08R2 IIS网站架设

    目录 目录 配置和安装IIS 环境设置 安装IIS服务器 网站的站点目录和欢迎页面 配置和安装IIS IIS是Windows的网站服务器,所以配置IIS服务的前提是需要一个网址.和DNS域名并添加主机 ...

  3. javascript:void()的理解

    href="javascript:void(0);"本身没有任何危害啊,表示这是一个空链接.如果想在网页上用a标签,但又不想产生页面实际跳转动作,就可以这么做.下面是一些用法对比: ...

  4. Webshell免杀

    过狗过D盾 <?php class me{ public $a = ''; function __destruct(){ assert("$this->a"); }}$ ...

  5. Vue是如何渲染页面的,渲染过程以及原理代码

    Vue是如何渲染页面的,渲染过程以及原理代码:https://www.cnblogs.com/ypinchina/p/7238402.html

  6. FTP上传下载文件(面向对象版)

    # 服务端 import socketserver import os import json import hashlib import struct class MySocketServer(so ...

  7. java虚拟机规范(se8)——class文件格式(三)

    4.5 字段 字段使用field_info结构来描述. 在同一个class文件中的两个字段不能有相同的名称和描述符. 结构的格式如下: field_info { u2 access_flags; u2 ...

  8. Android中shape的使用方法总结

    <?xml version="1.0" encoding="utf-8"?>  <shape xmlns:android="http ...

  9. SqlServer表名称定义

    每一个数据表 添加一个 扩展 属性:Description  填写表描述. 查看是否所有表都添加的Sql如下: SELECT a.name AS name, g.[value] FROM sys.ta ...

  10. 将word文档中的回车符进行删除