• 对拍


    鉴于昨天noi赛制不能看分导致我使用了多次对拍,今天来整理一下对拍的知识

    预备知识

    bash

    bash,指的linux常用的shell脚本语言。这个知道最好,不知道也无伤大雅。 bash就是把在terminal中的命令放到一个文件中,便于执行。 bash的文件名一般为*.sh,运行方法为在terminal中,输入命令bash *.sh即可。

    c++随机数

    我们使用srand()rand()来制造随机数。

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        srand(time(0));
        cout<<rand()%100;
    }
    

    产生一定范围随机数的通用表示公式是:

    ([0,n))rand()%n;

    ([a,b))(rand()%(b-a))+a;

    ([a,b])(rand()%(b-a+1))+a;

    ((a,b])(rand()%(b-a))+a+1;

    shell随机数

    for((i=1;i<=100;i++)); 
        do 
    	random=$((RANDOM%1000)); 
    	echo $random; 
        done
    

    开始

    朴素算法|标程

    朴素算法即暴力算法,可以自己打,也可以找到题解来进行对拍。 这里为std.cpp

    错误算法

    错误算法极为你自己的算法。 即为wrong.cpp

    数据输出程序

    数据产生程序使用随机数来造数据,注意造数据时要符合标准。 这里为data.in

    code

    sh版:

    #!/bin/bash                          
    g++ wrong.cpp -o wrong -Wall
    g++ data.cpp -o data -Wall
    g++ std.cpp -o std -Wall  
    while true;do
        ./data>data.in
        ./wrong<data.in>usr.out
        ./std<data.in>std.out
        if diff -b -B -q usr.out std.out;then
            echo "Wonderful!"
        else
            echo "Wrong Answer!"
            break
        fi
    done
    

    c++版:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){                      
        system("g++ wrong.cpp -o wrong -Wall");
        system("g++ data.cpp -o data -Wall");
        system("g++ std.cpp -o std -Wall");
        for(int T=1;T<=10000;T++){
            system("./data>data.in");
            system("./wrong<data.in>usr.out");
            system("./std<data.in>std.out");
            if(system("diff -b -B -q usr.out std.out")){
                puts("Wrong Answer");
                return 0;
            }
            else{
                printf("test : %d : Accept",T);
            }
        }
        return 0;
    }
    

    到此结束,感谢阅读。

  • 相关阅读:
    oracle 锁查询
    ORACLE 本session产生的redo
    UML
    面向对象
    设计思维
    程序员习惯
    程序员修炼之道
    架构指南
    微服务架构
    测试用例
  • 原文地址:https://www.cnblogs.com/hellohhy/p/13197853.html
Copyright © 2020-2023  润新知