之前出题,很苦恼出数据和检查程序,因为很多繁琐的工作,还很可能小手一抖出问题。

  最近又在出题。。。想起之前的对拍脚本,感觉不能更方便,于是撸了一套出题用的小工具,也学习了一点点的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 出题用的更多相关文章

  1. ACM&OI 基础数论算法专题

    ACM&OI 基础数学算法专题 一.数论基础 质数及其判法 (已完结) 质数的两种筛法 (已完结) 算数基本定理与质因数分解 (已完结) 约数与整除 (已完结) 整除分块 (已完结) 最大公约 ...

  2. ACM&OI 基础数学算法专题

    [前言] 本人学习了一定时间的算法,主要精力都花在数学类的算法上面 而数学类的算法中,本人的大部分精力也花费在了数论算法上 此类算法相对抽象,证明过程比较复杂 网络上的博客有写得非常好的,但也有写得不 ...

  3. 组合数学 - 置换群的幂运算 --- poj CARDS (洗牌机)

    CARDS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1448   Accepted: 773 Description ...

  4. [日常] HEOI 2019 退役记

    HEOI 2019 退役记 先开坑 坐等AFO 啥时候想起来就更一点(咕咕咕) Day 0 早上打了个LCT, 打完一遍过编译一遍AC...(看来不考这玩意了) 然后进行了一些精神文明建设活动奶了一口 ...

  5. 喵哈哈村的魔法考试 Round #6 (Div.3) 题解

    有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...

  6. 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...

  7. 开源百宝箱《HelloGitHub》第 64 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...

  8. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  9. ACM、OI等比赛中的程序对拍问题

    多年前请教于ZXYTIM(zxy)大牛,现在把windows环境下的版本贴出来. 手动数据调试效率太低,程序对拍还是非常实用的,特别适用于OI.蓝桥杯等这些比赛规则.可以用于暴力与AC算法之间的对拍. ...

随机推荐

  1. linux下创建公钥

    # linux下创建公钥 链接地址:https://www.cnblogs.com/ibyte/p/6086630.html 示例: scp -r /home/yutang/.ssh/id_rsa.p ...

  2. 时间&物质&效率

    由于我的家庭是地道的农民家庭,在上学的时候,父母很辛苦的供我读初中,高中,大学. 现在我想说的是,用时间来换取效率是我求学时最大的遗憾. 举一个例子吧:每次回家坐火车,火车很费时间,假如我不缺钱,完全 ...

  3. 目标跟踪ObjectT综述介绍

    此文也很详细:http://blog.csdn.net/maochongsandai110/article/details/11530045 原文链接:http://blog.csdn.net/pp5 ...

  4. 图像的全局特征--LBP特征

    原文链接:http://blog.csdn.net/zouxy09/article/details/7929531#comments 这个特征或许对三维图像特征提取有很大作用.文章有修改,如有疑问,请 ...

  5. 超酷消息警告框插件(SweetAlert)

    今天给大家推荐一款不错的超酷消息警告框–SweetAlert:SweetAlert是一款不需要jQuery支持的原生js提示框,风格类似bootstrap.它的提示框不仅美丽动人,并且允许自定义,支持 ...

  6. 优动漫PAINT漫画和插画方面软件特色

    优动漫PAINT也就是我们常说的clip studio paint(CSP)的中文版本,它是一款功能强大的漫画.插画绘制软件,它搭载了绘制漫画和插画所需的所有功能,包括丰富的笔工具.超强的笔压感应和手 ...

  7. 数据库_数据分片与mycat服务

    1.数据分片; 2.部署mycat服务;3.基于mycat服务创建新库新表. 一,数据分片 1.数据分片,也叫分库分表,即将存放在一台数据库服务器中的数据,按照特定方式进行拆分,分散存放到其它多台服务 ...

  8. 当使用junit4 对spring框架中controller/service/mapper各层进行测试时,需要添加的配置

    @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {&quo ...

  9. Win7系统无法记住网络访问的凭据怎么办?

    访问内网其他IP时已经打勾记住我的凭据了,但是注销或者重启Win7系统之后,又得重新输入用户名跟密码怎么办? 下面就为大家介绍一下如何让Win7系统记住网络访问的凭据. 以上问题还会引发,重启后无法正 ...

  10. C语言提高 (6) 第六天 文件(续) 链表的操作

    1昨日回顾 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include &l ...