制造测试数据的程序及对拍程序概述(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入门指南
作为一名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)的更多相关文章
- [转]Linux/Windows下脚本对拍程序
[新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...
- acm对拍程序 以及sublime text3的文件自动更新插件auto refresh
acm等算法比赛常用---对拍 以及sublime text3的文件自动更新插件auto refresh 对拍 对拍即程序自动对比正确程序的运行结果和错误程序的运行结果之间的差异 废话少说, 直接上操 ...
- Mac OS下编写对拍程序
介绍 对拍是信息学竞赛中重要的技巧,它通过一个效率低下但正确率可以保证的程序,利用庞大的随机生成数据来验证我们的高级算法程序.对拍最大的优势在于可以通过人力所不能及的速度和数量达到验证的效果.下面我们 ...
- 手把手教你写对拍程序(PASCAL)
谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...
- ACM对拍程序
1.把所需对拍的代码的可执行文件a.exe b.exe放在同一目录下 2.把rand数据的代码的可执行文件c.exe放在该目录下 3.新建一个txt文件,里面添加代码,后把格式改成bat @echo ...
- [zt]手把手教你写对拍程序(PASCAL)
谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...
- 对拍程序 x
一.介绍 在做题或者正式比赛过程中总会把水题做水做乱,但因为样例有坑所以直接过了样例,然后拿去评测结果发现全WA.那如何在这种情况下检查自己程序或算法的正确性呢?对拍是一个简便省事的方案. 所谓“对拍 ...
- ACM 中的对拍程序
所谓对拍,就是随机生成数据,然后用一个肯定正确的暴力算法的程序,去测试一个要提交的程序. 由于比赛中一般使用 Linux 系统,所以本篇博客的代码都是 Linux 下的程序代码. 其实最简单的方式是写 ...
- Windows系统对拍程序
Windows系统对拍程序,其中包含c++11用法,请使用c++11标准编译.此对拍程序会在发现错误时显示错误行号以及对应内容,方便比对. 此对拍程序自动使用g++对源代码进行编译.如果出现找不到g+ ...
随机推荐
- Ionic3 遇到的一些错误- Error: Your isarray platform does not have Api.js
执行:ionic cordova resources android --icon -i 生成应用图标时,出现下面的错误: 尝试解决方案: 删掉整个项目,重新创建,竟然好了....
- hdu 4717 Tree2cycle(树形DP)
Tree2cycle Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Tot ...
- 取得 iframe 容器的 URL
检测所在窗口是否为最外层的窗口,若不是则跳脱包含它的框架 if( window !== window.top ) { window.top.location = location; } top ...
- spring boot + thymeleaf 3 国际化
在给spring boot 1.5.6 + thymeleaf 3进行国际化时,踩了一个坑(其实不止一个). 现象: 看到了吧, 就是取值的key, 后面被加了_en_US 或 _zh_CN, 以及前 ...
- javaweb部署多个项目(复制的项目)
最近需要在一台服务器部署两个已经编译完了的javaweb项目,但是因为项目名一样,仅修改文件夹的名字无法实现两个项目共存,最后只能考虑采用部署多个tomcat服务器的方法来实现.搜索后终于找到个好方法 ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
- Scrum Meeting Alpha - 10
Scrum Meeting Alpha - 10 NewTeam 2017/11/06 地点:主楼和3号楼之间的走廊2楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了对涉及内容修改的API的 ...
- selenium页面元素操作(简易版)
介绍一下,这是处理页面元素的基本方法,@selenium 发送文字 element.send_keys(keys_to_send) 单击 element.click() 提交表单 el ...
- Python学习--语句
一.print 和 import print 打印多个表达式,用逗号隔开 >>> print 'ab','cd' ab cd import import somemodule fro ...
- J-Link驱动下载和Hex程序下载
J-LINK驱动下载 1.首先拥有硬件J-Link硬件. 2.安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com/downloads/jlink/JLin ...