windows对拍及其应用

Posted zhshh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows对拍及其应用相关的知识,希望对你有一定的参考价值。

目录

WARN!
#include <bits/stdc++.h>在OI等里面不一定能应用,下面只是为了减小长度而已
bits库实际上就是#include <XXX>了一堆而已

目录

经典代码

对拍.bat

:loop
makedata.exe
K.exe
Kture.exe
fc a.out b.out
if %errorlevel%==0 goto loop
pause 

解释

:loop

创建叫做loop的标签

makedata.exe
K.exe
Kture.exe

运行makedata.exe,K.exe,Kture.exe
其中makedata输出到x.in,然后K.exe从x.in读入,输出到a.out,Ktrue.exe从x.in读入,输出到b.out

fc a.out b.out
if %errorlevel%==0 goto loop
pause 

比较a.out b.out
fc是windows下面一个程序,简单来说如果两个文件相同返回0,不同返回1
%errorlevel%是一个变量,意思是上一行代码的返回值
如果 返回==0 跳转到loop(第一行标签)
如果 返回不等于0 跳过这句话,执行pause(暂停),然后程序结束

示例

duipai.bat

:loop
echo %random%|data.exe
baoli.exe
mine.exe
fc mine.out baoli.out
if %errorlevel%==0 goto loop
pause 

data.exe

输出测试数据到in.in

#include <bits/stdc++.h>
using namespace std;
int main(){
    int rands;
    freopen("in.in","w",stdout); 
    cin>>rands;
    srand(rands);//随机数种子,一会再说 
    cout<<rand()<<" "<<rand();
    return 0;
}

由于windowsCPP的特性,srand(time(0))一秒只有一个种子,而自己的程序不会太慢,所以直接输入一个种子即可
echo %random%|data.exe里面,是%random%是一个随机数(由duipai.bat解析器cmd.exe随机,每次都是随机的)
|是管道运算,把前面命令应该显示的东西作为标准输入给后面的,echo XXX是显示XXX
这句话意思是把%random%(叫做random的变量,在没有手动声明其值时,每次调用都是随机数)输入给data.exe

baoli.exe

一个已知正解的程序,比如包括暴力求解程序,别人、网上的正解等

#include <bits/stdc++.h>
using namespace std;
int main(){
    int q,w;
    freopen("in.in","r",stdin);
    freopen("baoli.out","w",stdout); 
    cin>>q>>w;
    int ans=0;
    if(q>0) {
        for(int i=1;i<=q;i++){
            ans++;
        }
    }else{
        for(int i=-1;i>=q;i--){
            ans--;
        }
    }
    if(w>0) {
        for(int i=1;i<=w;i++){
            ans++;
        }
    }else{
        for(int i=-1;i>=w;i--){
            ans--;
        }
    }
    cout<<ans;
    return 0;
}

mine.exe

自己的程序或者测试的程序
为了显示功能,这里是随机出错。。

#include <bits/stdc++.h> 
using namespace std;
int main(){
    int q,w;
    freopen("in.in","r",stdin);
    freopen("mine.out","w",stdout); 
    cin>>q>>w;
    srand(time(0)); 
    int r=rand()%20; 
    if(r>=10){
        cout<<q+w+1;
    }else{
        cout<<q+w;
    }
    return 0;
}

最后双击duipai.bat即可看到效果

以上是关于windows对拍及其应用的主要内容,如果未能解决你的问题,请参考以下文章

Windows系统对拍程序

windows和linux下如何对拍

对拍源码QwQ

Windows对拍模板

『工具』对拍器

c++微秒级计时+对拍