OI (信息 ) 竞赛中的对拍程序,造数据,对拍利器

来源:互联网 发布:元素周期表记忆软件 编辑:程序博客网 时间:2024/05/21 18:37

作为一名OIer,比赛时,对拍是必须的 
不对拍,有时可以悔恨终身

首先,对拍的程序 
一个是要交的程序 
另一个可以是暴力、搜索等,可以比较慢,但是必须正确

下面是C++版对拍程序(C++ & cmd) 
注意:所有程序不用加文件输入输出

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

#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 randomfrom 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 11 21 31 41 52 12 22 32 42 53 13 23 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 randomfout = 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值。

样例输出:

523#.#.....####..######.#..#..#.##.##.##...##..#.####.###...##...#.#..#..#####.#......##...##.#...###.####.#.##....###.###.#.#.##.#..#...##..#..####..#.###......####..#.##..##.#.##.#..#.#####.##.##.##..#......##....#.#....##.#.##.###...####...#.#.....#.#####.#.#...###..#.#...####.###..##..#.##.######.##..#.#..##....##.....#.#.#.##.#.###..#.##...#.#..###.#.###..#..##.#.#..#.....##..###..#..#..#.#..######..##.#.######..##.#...###.#.##.#.###....##.....#...##...#..#...#.##.###.......##...#..#.##.###.###..##.#.#....#####..#.####.#.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 oswhile 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入门指南