ACM/OI 出题用
之前出题,很苦恼出数据和检查程序,因为很多繁琐的工作,还很可能小手一抖出问题。
最近又在出题。。。想起之前的对拍脚本,感觉不能更方便,于是撸了一套出题用的小工具,也学习了一点点的DOS命令
首先是输入数据,需要十组,命名规则为01.in,02.in,……,10.in,写好数据生成器rand.cpp后去掉输出重定向然后编译,运行以下脚本
@echo off
set a=
:loop
set /a a=%a%+
rand.exe>%a%.in
echo %a%
ping -n 127.0.0.1>nul
if %a% == goto NEXT
goto loop
:NEXT
set /a a=%a%+
rand.exe>%a%.in
echo %a%
pause
in_maker
@符号表示不把指令显示出来,echo off表示不输出提示
这里学到一个小技巧,dos命令里(貌似)没有sleep命令,于是通过ping来代替,因为每次ping会等待1s,所以需要sleep多少秒就ping多少次(加一)就行,这里因为数据生成器使用时间初始化随机种子,所以需要间隔一秒,所以ping两次
这里第一次接触set操作和变量,具体的以后再研究,这里的变量是 %variable% (注意格式,和for的变量区分)。
这里用到了输出指向>,当然,接下来的out_maker用到了输入指向<
---------------------------------------------------------------------------------------------------------------------------
接下来是输出,命名规则为01.out,02.out,……,10.out,写好标程std.cpp后去掉输入输出重定向,运行以下脚本
@echo off
set a=
:loop
set /a a=%a%+
std.exe<%a%.in>%a%.out
echo %a%
if %a% == goto NEXT
goto loop
:NEXT
set /a a=%a%+
std.exe<%a%.in>%a%.out
echo %a%
pause
out_maker
--------------------------------------------------------------------------------------------------------------------------------
如果确定rand.cpp和std.cpp都没有问题,其实可以写在一起,在in的最后一行,加上call out_maker.bat即可,以后就可以自动化生成数据
@echo off
set a=
:loop
set /a a=%a%+
rand.exe>%a%.in
echo %a%
ping -n 127.0.0.1>nul
if %a% == goto NEXT
goto loop
:NEXT
set /a a=%a%+
rand.exe>%a%.in
echo %a%
call out_maker.bat
pause
data_maker
------------------------------------------------------------------------------------------------------------------------------
然后就是对拍啊,不敢保证自己的标程是对的,要找小伙伴写代码来测试数据,拿到他的代码my.cpp后去掉输入输出重定向编译,然后运行以下脚本
@echo off
set a=
:loop
set /a a=%a%+
my.exe<%a%.in>std%a%.out
fc std%a%.out %a%.out
if errorlevel goto dif
if errorlevel goto sam
:dif
del std%a%.out
echo %a%
pause
if %a% == goto NEXT
goto loop
:sam
del std%a%.out
echo %a%
if %a% == goto NEXT
goto loop :NEXT
set /a a=%a%+
my.exe<%a%.in>std%a%.out
fc std%a%.out %a%.out
del std%a%.out
echo %a%
pause
checker_goto
之前的代码已经可以解决问题了,但是使用goto的话有两个弊病,一是破坏程序结构,使逻辑混乱,二是为了保持结构,有很多重复代码出现,为了解决这个问题,使用for语句和if语句
@echo off
for /l %%a in (,,) do (
if %%a == (
my.exe<%%a.in>std%%a.out
fc std%%a.out %%a.out
del std%%a.out
echo %%a
) else (
my.exe<%%a.in>std%%a.out
fc std%%a.out %%a.out
if errorlevel (
del std%%a.out
echo %%a
pause
) else (
del std%%a.out
echo %%a
)
)
)
pause
这里需要注意的就是,dos命令是格式敏感的if-else必须写成这个格式(注意其中的空格),for循环有很多写法,通过参数区分,这里只使用了/L的,是从1每次加1到10为止。
for中使用的变量是&&variable(区分于set的变量)
到这里,功能实现了,代码也很优美了。
ACM/OI 出题用的更多相关文章
- ACM&OI 基础数论算法专题
ACM&OI 基础数学算法专题 一.数论基础 质数及其判法 (已完结) 质数的两种筛法 (已完结) 算数基本定理与质因数分解 (已完结) 约数与整除 (已完结) 整除分块 (已完结) 最大公约 ...
- ACM&OI 基础数学算法专题
[前言] 本人学习了一定时间的算法,主要精力都花在数学类的算法上面 而数学类的算法中,本人的大部分精力也花费在了数论算法上 此类算法相对抽象,证明过程比较复杂 网络上的博客有写得非常好的,但也有写得不 ...
- 组合数学 - 置换群的幂运算 --- poj CARDS (洗牌机)
CARDS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1448 Accepted: 773 Description ...
- [日常] HEOI 2019 退役记
HEOI 2019 退役记 先开坑 坐等AFO 啥时候想起来就更一点(咕咕咕) Day 0 早上打了个LCT, 打完一遍过编译一遍AC...(看来不考这玩意了) 然后进行了一些精神文明建设活动奶了一口 ...
- 喵哈哈村的魔法考试 Round #6 (Div.3) 题解
有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...
- 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本
我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...
- 开源百宝箱《HelloGitHub》第 64 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...
- 收集一些关于OI/ACM的奇怪的东西……
一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...
- ACM、OI等比赛中的程序对拍问题
多年前请教于ZXYTIM(zxy)大牛,现在把windows环境下的版本贴出来. 手动数据调试效率太低,程序对拍还是非常实用的,特别适用于OI.蓝桥杯等这些比赛规则.可以用于暴力与AC算法之间的对拍. ...
随机推荐
- asp.net的TextBox回车触发指定的按钮事件
一; event.returnValue = false; document.all[button].click(); } } ...
- 《剑指offer 第二版》题解
剑指Offer 按题号排序 面试题 3:数组中重复的数字 面试题 4:二维数组中的查找 面试题 5:替换空格 面试题 6:从头到尾打印链表 面试题 7:重建二叉树 面试题 8:二叉树的下一个节点 面试 ...
- java题(转载)
1.下面中哪两个可以在A的子类中使用:( ) class A { protected int method1 (int a, int b) { return 0; } } A. public int ...
- poj3083 Children of the Candy Corn 深搜+广搜
这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...
- 在APP开发中,如何优雅的设计APP页面
1.明确页面设计在整个产品设计中的位置 互联网产品设计的流程大致是:产品定位——需求分析——信息架构设计——流程设计——页面框架设计——设计说明——输出设计文档.可以看到页面设计是处于整个流程的后期, ...
- 【Linux】SecureCRT中按退格键出现^H
分两步: ①SecureCRT上部的“选项”→“会话选项”→终端→仿真→映射键→其他映射→Backspace发送delete(B) 勾选中,确定 ②SecureCRT上部的“选项”→全局选项→常规→默 ...
- 编译VTK的MFC库
原文链接:http://blog.csdn.net/left_la/article/details/7069708 本人做了少量修改! Win7 + VS2010 + CMake2.8.6 + VTK ...
- 6 Python+Selenium的元素定位方法(CSS)
[环境] python3.6+selenium3.0.2+Firefox50.0+win7 [定位方法] 1.方法:find_element_by_css_selector('xx') CSS的语法比 ...
- 如何用npm安装vue
下载安装node.js,安装完毕做好配置后开始运行. 如果npm版本太低,需要升级一下npm # 查看版本 $ npm -v #升级 npm cnpm install npm -g 安装vue-cli ...
- swift类型操作规范
type(of:) Applied to an object: the polymorphic (internal) type of the object, regardless of how a r ...