• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++知识点—对拍

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

~对拍~

  一般的刷题时间,机房里的Dalao们用来检查代码的方式还是会以手造毒瘤数据为主,手造数据更方便完全回顾代码,且规模一般较小,调试起来也容易。美中不足的是较小范围的数据很可能触及不到数据的边界,以致该发现的问题没发现,交到OJ测评姬上被毒瘤数据反手一枪秒了。  

  对拍是一种全自动的验证程序。首先,你需要一个std和一个暴力解法。一段合格的std应该具有如下特点:思路正确,复杂度比暴力优,能编译过去(大雾,小规模数据(比如样例或者某些手造数据)可以轻松通过并合乎标准。而你的暴力解法则需要有以下特点:真的暴力,复杂度比std低一些,完全保证的正确性(暴力都写不对还想要部分分?),能够尽快处理大规模数据(看似矛盾,但其实只要能在截止前提交就行,对拍所用的时间简直不值一提)。

  当然,有了标程,就不能缺少数据生成器,不然再nb的std也排不上用场。数据生成器所生成的数据应该尽可能的,完全的随机(Windows的伪随机数真是让人泪目,Linux环境下则要好很多),而且永远永远要合乎题意,当你生成一堆错误的数据去对拍,结果可想而知。

   对拍的基本流程就是先用一个输入来获得std和暴力的两组输出,判断这两组输出是否完全相同,如果完全相同,哦那没事了,下一组。如果两者有地方不一样(不是那些空格啊换行之类零碎而无关紧要的东西),那说明肯定是std出了问题(暴力保证正确的情况下)。如果无法保证暴力算法的正确性,那么可以对小规模数据进行手动模拟,对大规模数据进行估算等等操作,方便我们找出哪个算法是内鬼(也许两个都是内鬼也不一定(大雾。

  那我们搞个板子来看一下

  如果你喜欢写.bat文件

  那可以这么写

@echo off
:loop
MakeData.exe
std.exe
Baoli.exe
fc std.out Baoli.out
if not errorlevel 1 goto loop
pause
:end

  平时这样写倒是无伤大雅,但问题是考试的时候用的是Linux...

  于是乎我们可以使用另一种方法

  用C++编译一个对拍文件并运行

#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main() 
{
    for(int i = 1; i <= 1000; i++) 
    {
        system("random.exe");
        double st = clock();
        system("quq.exe");
        double ed = clock();
        system("qwq.exe");
        if(system("fc data.out data.ans")) 
        {
            puts("Wrong Answer");
            return 0;
        }
        else 
        {
            printf("AC in #%d, time: %.0lfms\n", i, ed-st);
        }
    }
}

  对拍的流程和方式基本如此,感觉这么简单的玩意也没啥好说的

  哎对...对拍是用来造数据的(大雾


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C语言:已知三角形三边长求面积发布时间:2022-07-13
下一篇:
C语言第零次作业总结发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap