对拍教程-By skyler2003

对拍教程-By skyler2003对拍,是什么呢?对拍就是你给两个程序,和一个随机数据生成器,然后系统去用这个随机数据生成器的输出作为你这两个程序的输入,然后比较你这两个程序的输出,可以找到一组使这两个程序输出不一样的数据(如果存在的话)为什么对拍No

对拍,是什么呢?

对拍就是你给两个程序,和一个随机数据生成器,然后系统去用这个随机数据生成器的输出作为你这两个程序的输入,然后比较你这两个程序的输出,可以找到一组使这两个程序输出不一样的数据(如果存在的话)

为什么对拍

Noip的赛制中只能提交一次,所以这一次的机会就显得十分珍贵。

你在Noip中写了一个dp,却不知道哪里错了
你会写一个暴力,可是100%会超时
那么,自己再写个数据生成器
然后来一波对拍
就能更加容易发现错误
(方法同适用于许多恶心题[图论等],说不定对拍一下就from 0 to 100了)

怎么,去对拍呢?

首先,新建一个文件夹,
然后,在里面放入biaoda.exe,和test.exe,还有data.exe
biaoda.exe是你暴力写的一个做法或者你从网上找的一份AC代码生成的程序,反正结果肯定是对的。
test.exe就是你的代码生成的程序,你不知道他对不对或者你知道他是WA的但是你不知道哪里WA了,
data.exe就是你的数据生成器,你可以用它去生成你认为的合法数据

对拍程序,要怎么写呢?

本文会同时出示windows和linux的对拍脚本
Windows

:start
gen.exe > data
program.exe < data > program.out
std.exe < data > std.out
@echo %time%
fc program.out std.out
if errorlevel 0 goto start

pause

linux

#!/bin/bash
result=0
while [ $result == 0 ]; do
    ./gen > data
    ./program < data > program.out
    ./std < data > std.out
    diff -Z program.out std.out
    result=$?
    echo "Time: $(date)"
done

echo "Target program failed"
# 务必记得: chmod u+x check.sh

数据生成器(data.cpp),要怎么写?

这里我先给个A+B Problem

#include <iostream> 
#include <cstdio> 
#include <cstdlib> 
#include <ctime> 
using namespace std;  
int main()  
{  
    srand(time(0));//生成随机数种子,预防每次生成相同的数据
// 但最好加一下下面这句,不然time(0)返回的是秒数要是一秒执行了多次就尬了
     //Sleep(1001);
     /*Windows下需include<windows.h>,linux下需改为sleep(1001)且需include<unistd.h>*/
// srand( (unsigned)time( NULL ) ); 
    int a,b;  
    a=rand()%100+1,b=rand()%100+1;  
    printf("%d %d\n",a,b);   
    return 0;  
}  

如果要手动对拍的话……

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
    srand(time(0));
    char ink[15];
    for(int i=1;i<=10;i++){
        sprintf(ink,"shop%d.in",i);
        freopen(ink,"w",stdout);
        Sleep(1000);
        int a=rand()%5000;
        int b=rand()%5000;
        cout<<a+b<<endl;
        fclose(stdout);
        } 
    }
    return 0;
    //这是在windows下的,如改成linux方法见上。
    //不能用<bits/stdc++.h>的话请这样:
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<ctime>
}

今天的文章对拍教程-By skyler2003分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60057.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注