制造测试数据的程序及对拍程序概述(Like CyaRon)

Posted 三华生DingY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制造测试数据的程序及对拍程序概述(Like CyaRon)相关的知识,希望对你有一定的参考价值。

作为一名OIer,比赛时,对拍是必须的 

 

不对拍,有时可以悔恨终身

 

首先,对拍的程序 

 

一个是要交的程序 

 

另一个可以是暴力、搜索等,可以比较慢,但是必须正确

 

下面是C++版对拍程序(C++ & cmd) 

 

注意:所有程序不用加文件输入输出

 

#include<cstdio>  

#include<cstdio>

#include<cstdlib>

#include<ctime>

int main()

{   long s,t;

    while(1){

        system("cls");

        do{

            system("data > data.in"); //data是数据生成程序

            s=clock();

            system("a.cpp < data1.in > data1.out");  //a是要交的程序

            t=clock();

            system("b.cpp < data2.in > data2.out");  //b是正确的程序

            if(system("fc data1.out data2.out > nul"))

                break;

            else printf("AC time: %ldms\n",t-s);

        }while(1);

        printf("WA time: %ldms\n",t-s);  //运行时间 

        system("fc data1.out data2.out");

        system("pause>nul");

    }

    return 0;

}

    return 0;

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [cpp] view plain copy

 

include<cstdio>    

 

include<cstdlib>    

 

using namespace std;    

 

int main(){    

 

    for(int i=1;i<=1e5;i++){    

 

        #ifdef __linux    

 

        printf("You are on Linux!\n#####################\n");    

 

        system("./gen && ./sol && ./bf");    

 

        if(!system("diff tmpSol.out tmpBf.out"))    

 

        #endif    

 

        #ifdef _WIN32    

 

        printf("You are on Windows!\n#####################\n");    

 

        system("gen && sol && bf");    

 

        if(!system("fc tmpSol.out tmpBf.out"))    

 

        #endif    

 

        {    

 

            printf("Point #%d:\nAC~~ Ni GuoAK le~\n",i);    

 

        }    

 

        else{    

 

            printf("Point #%d:\nWA!! Ni Hoi U Jok Ba~\n",i);    

 

            break;    

 

        }    

 

    }    

 

    return 0;    

 

}    

 

0.简介:

 

在Python环境下,利用random,或洛谷研发的Cyaron都是不错的选择。

 

如果要使用Cyaron 请参见

 

Git-hub luogu-dev/cyaron

 

1.环境配置:

 

安装Python3及以上版本,在安装时选择自定义,勾选自动设置环境变量选项。当然能自己搞%%%

 

安装完成后打开命令提示符,输入python,如果进入Python环境就成功啦!!!

 

2.引入包:

 

想要使用random或cyaron,需要在程序开始引入包,类似于C++的头文件。

 

import random

 

from cyaron import *

 

1 2 如果你是第一次使用,需要安装cyaron。打开命令提示符输入以下命令即可。

 

pip install cyaron

 

1 3.格式化创建输入输出文件

 

fout = open("brick.in","w")

 

fout.close()

 

1 2 创建brick.in

 

for i in range(1,11):

 

    fout = open("test%d.in"%i,"w")

fout.close()

 

py的range返回值是左闭右开的

 

1 2 3 4 创建test1.in~test10.in

 

4.输出

 

屏幕输出

 

for i in range(1,6):

 

    for j in range(1,6):

 

            print("%d %d\n"%(i,j))

1 2 3 py的%d,\n等用法类似C++ 

 

注意后半部分用%分割 

 

样例输出

 

1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 2 5 3 1 3 2 3 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 文件输出

 

接上一次的代码,向test1.in~test10.in中写入

 

for i in range(1,11):

 

    fout = open("test%d.in"%i,"w")

 

    fout.write("%d "%i)

fout.write的用法与print类似

 

fout.close()

 

1 2 3 4 5 5.生成数据

 

random

import random

fout = open("brick.in","w")

t = random.randint(1, 10)

fout.write("%d\n"%t)

for i in range(1,t+1):

        n = random.randint(1, 100)

        fout.write("%d\n"%n)

        for j in range(1,n+1):

                for k in range(1,n+1):

                        p=random.randint(1,2)

                        if p==1:

                                fout.write(".")

                        if p==2:

                                fout.write("#")

                fout.write("\n")

fout.close()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 random有random.randint(l,r)函数,返回[l,r]之间的Int值。

 

样例输出:

 

5 23

 

.#.....####..######.#.

 

.#..#.##.##.##...##..#.

 

.###...##...#.#..#.

 

.#####.#......##...##.#

 

...###.####.#.##....###

 

.###.#.#.##.#..#...##..

 

..####..#.###......

 

..#.##..##.#.##.#..#.

 

.##.##.##..#......

 

....#.#....##.#.##.

 

...####...#.#.....#.###

 

.#.#...###..#.#...

 

.###..##..#.##.######.

 

..#.#..##....##.....

 

.#.#.##.#.###..#.##...#

 

.#..###.#.###..#..##.#.

 

..#.....##..###..#..#.

 

.#.#..######..##.#.####

 

..##.#...###.#.##.#.

 

....##.....#...##...

 

..#...#.##.###.......##

 

...#..#.##.###.###..##.

 

.#....#####..#.####.#.

 

25

 

..#.#.#####.##..##..#.

 

..#.#..##.#.#.#.#..###..#

 

..#.###.#####.#...##.

 

....#...#..##.#..##.#.

 

..##.##..#..##..####...

 

.#....#......##..#.#.###.

 

...##.##.....#..##.##...

 

.##..######.#.#..#####..#

 

.....#####.####.###..#.

 

.####...##...#.#.###.##..

 

.#..####..#.##...#.#.

 

..##....##..###.#.#.

 

......#.######.#..#...

 

.#.####..##.#.#.#..#.

 

..###.##.####.####..#..##

 

.####.#####..#..#.#.#....

 

.#.#.###.#.##.#..#####..#

 

.#...#.####.####.#..#.

 

..##...#.###.#...#.##.

 

..##..##.####..##..

 

.#.####.#..####....#####.

 

......###...##.##.#.##.

 

.#.#..#.##...###.##.#.

 

..#.##.#...##.#.#...#...

 

..##....#....####..##.

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 数据太多不完全展示

 

6.对拍

 

对拍需要系统包

 

import os

 

1 OS命令用法与c++的system命令类似,都是引用系统命令提示符的命令

 

import os

 

while True:

 

    os.system("a.exe")

 

    os.system("b.exe")

 

    os.system("fc a.out b.out")

1 2 3 4 5 当然你也可以用C++

 

#include <cstdlib>

using namespace std;

int main(){

    while (1){

        system("python mkdt.py");

        system("a.exe");

        system("b.exe");

        system("fc a.out b.out");

    }

    return 0;

}

1 2 3 4 5 6 7 8 9 10 11 对于不需要写文件输入输出的对拍Cyaron有更好的解决方案。它有自带的对拍函数可以引用。

 

7.Summary

 

当然了,上面的操作都是要设置好Python的环境变量的。

 

如果你对Python的基本语法还有不理解的地方,请参考luogu Python入门指南

制造测试数据的程序及对拍程序概述(Like CyaRon)

 

2017-12-13 22:25:13
thumb_up 0

 


作为一名OIer,比赛时,对拍是必须的 

不对拍,有时可以悔恨终身

首先,对拍的程序 

一个是要交的程序 

另一个可以是暴力、搜索等,可以比较慢,但是必须正确

下面是C++版对拍程序(C++ & cmd) 

注意:所有程序不用加文件输入输出

#include<cstdio>  
#include<cstdio>
#include<cstdlib>
#include<ctime>
int main()
{   long s,t;
    while(1){
        system("cls");
        do{
            system("data > data.in"); //data是数据生成程序
            s=clock();
            system("a.cpp < data1.in > data1.out");  //a是要交的程序
            t=clock();
            system("b.cpp < data2.in > data2.out");  //b是正确的程序
            if(system("fc data1.out data2.out > nul"))
                break;
            else printf("AC time: %ldms\n",t-s);
        }while(1);
        printf("WA time: %ldms\n",t-s);  //运行时间 
        system("fc data1.out data2.out");
        system("pause>nul");
    }
    return 0;
}
    return 0;
}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [cpp] view plain copy

include<cstdio>    

include<cstdlib>    

using namespace std;    

int main(){    

    for(int i=1;i<=1e5;i++){    

        #ifdef __linux    

        printf("You are on Linux!\n#####################\n");    

        system("./gen && ./sol && ./bf");    

        if(!system("diff tmpSol.out tmpBf.out"))    

        #endif    

        #ifdef _WIN32    

        printf("You are on Windows!\n#####################\n");    

        system("gen && sol && bf");    

        if(!system("fc tmpSol.out tmpBf.out"))    

        #endif    

        {    

            printf("Point #%d:\nAC~~ Ni GuoAK le~\n",i);    

        }    

        else{    

            printf("Point #%d:\nWA!! Ni Hoi U Jok Ba~\n",i);    

            break;    

        }    

    }    

    return 0;    

}    

0.简介:

在Python环境下,利用random,或洛谷研发的Cyaron都是不错的选择。

如果要使用Cyaron 请参见

Git-hub luogu-dev/cyaron

1.环境配置:

安装Python3及以上版本,在安装时选择自定义,勾选自动设置环境变量选项。当然能自己搞%%%

安装完成后打开命令提示符,输入python,如果进入Python环境就成功啦!!!

2.引入包:

想要使用random或cyaron,需要在程序开始引入包,类似于C++的头文件。

import random

from cyaron import *

1 2 如果你是第一次使用,需要安装cyaron。打开命令提示符输入以下命令即可。

pip install cyaron

1 3.格式化创建输入输出文件

fout = open("brick.in","w")

fout.close()

1 2 创建brick.in

for i in range(1,11):

    fout = open("test%d.in"%i,"w")

fout.close()

py的range返回值是左闭右开的

1 2 3 4 创建test1.in~test10.in

4.输出

屏幕输出

for i in range(1,6):

    for j in range(1,6):

            print("%d %d\n"%(i,j))

1 2 3 py的%d,\n等用法类似C++ 

注意后半部分用%分割 

样例输出

1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 2 5 3 1 3 2 3 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 文件输出

接上一次的代码,向test1.in~test10.in中写入

for i in range(1,11):

    fout = open("test%d.in"%i,"w")

    fout.write("%d "%i)

fout.write的用法与print类似

fout.close()

1 2 3 4 5 5.生成数据

random
import random
fout = open("brick.in","w")
t = random.randint(1, 10)
fout.write("%d\n"%t)
for i in range(1,t+1):
        n = random.randint(1, 100)
        fout.write("%d\n"%n)
        for j in range(1,n+1):
                for k in range(1,n+1):
                        p=random.randint(1,2)
                        if p==1:
                                fout.write(".")
                        if p==2:
                                fout.write("#")
                fout.write("\n")
fout.close()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 random有random.randint(l,r)函数,返回[l,r]之间的Int值。

样例输出:

5 23

.#.....####..######.#.

.#..#.##.##.##...##..#.

.###...##...#.#..#.

.#####.#......##...##.#

...###.####.#.##....###

.###.#.#.##.#..#...##..

..####..#.###......

..#.##..##.#.##.#..#.

.##.##.##..#......

....#.#....##.#.##.

...####...#.#.....#.###

.#.#...###..#.#...

.###..##..#.##.######.

..#.#..##....##.....

.#.#.##.#.###..#.##...#

.#..###.#.###..#..##.#.

..#.....##..###..#..#.

.#.#..######..##.#.####

..##.#...###.#.##.#.

....##.....#...##...

..#...#.##.###.......##

...#..#.##.###.###..##.

.#....#####..#.####.#.

25

..#.#.#####.##..##..#.

..#.#..##.#.#.#.#..###..#

..#.###.#####.#...##.

....#...#..##.#..##.#.

..##.##..#..##..####...

.#....#......##..#.#.###.

...##.##.....#..##.##...

.##..######.#.#..#####..#

.....#####.####.###..#.

.####...##...#.#.###.##..

.#..####..#.##...#.#.

..##....##..###.#.#.

......#.######.#..#...

.#.####..##.#.#.#..#.

..###.##.####.####..#..##

.####.#####..#..#.#.#....

.#.#.###.#.##.#..#####..#

.#...#.####.####.#..#.

..##...#.###.#...#.##.

..##..##.####..##..

.#.####.#..####....#####.

......###...##.##.#.##.

.#.#..#.##...###.##.#.

..#.##.#...##.#.#...#...

..##....#....####..##.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 数据太多不完全展示

6.对拍

对拍需要系统包

import os

1 OS命令用法与c++的system命令类似,都是引用系统命令提示符的命令

import os

while True:

    os.system("a.exe")

    os.system("b.exe")

    os.system("fc a.out b.out")

1 2 3 4 5 当然你也可以用C++

#include <cstdlib>
using namespace std;
int main(){
    while (1){
        system("python mkdt.py");
        system("a.exe");
        system("b.exe");
        system("fc a.out b.out");
    }
    return 0;
}

1 2 3 4 5 6 7 8 9 10 11 对于不需要写文件输入输出的对拍Cyaron有更好的解决方案。它有自带的对拍函数可以引用。

7.Summary

当然了,上面的操作都是要设置好Python的环境变量的。

如果你对Python的基本语法还有不理解的地方,请参考luogu Python入门指南

以上是关于制造测试数据的程序及对拍程序概述(Like CyaRon)的主要内容,如果未能解决你的问题,请参考以下文章

简易对拍器

关于对拍

对拍程序讲解及源码举例

对拍程序

程序对拍

关于对拍