作为一名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入门指南
作为一名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入门指南