这个嘛是本人专门为了NOI上面对拍程序写的对拍程序,已经经历了NOI2015的考验;更重要的是——纯Pascal的哦(HansBug:其实是我不会写.sh脚本TT,谁叫用惯了windows的我只会写bat呢)。。。(本人实测复杂度约为 \( {10}^{5} \) 的程序在windows下每秒钟约可以拍20次左右,linux下可以最高达到600次每秒哦,上次我开动程序后当我反应过来之后次数已经是四位数了么么哒,当然了如果你程序本身就复杂度过高的话那么还是没有办法,毕竟受到程序运行速度的制约)。。。

需要的可执行文件(注:linux下面可执行文件无.exe后缀,在程序中去掉即可,这三个可执行文件均需要文件输入输出,其中std程序输出文件为stdXXX.out,数据生成器输出到XXX.in,当然了欢迎擅长使用输入输出管道的童鞋进行优化喽):

1.XXX.exe/XXX——你的程序

2.stdXXX.exe/stdXXX——你的标程(其实也可以是暴力程序,总之保证这个一定不WA就行了)

3.fuckXXX.exe/fuckXXX——你的数据生成器(其实这个逗比的前缀前几天才被JYY狠狠地吐槽了一下,不过我已经用这种对拍格式一年多了,于是这个程序还是先按照我自己的习惯来设计的啦,欢迎大家按照自己的习惯来进行修改^_^)

然后在Linux下直接编译号后开终端直接用就好啦^_^

此程序本人将其命名为Jd。。。。希望即使此程序被传开之后,Jd这个专有名词依然可以保留下去啦

代码如下:(Jd.exe(Win)/Jd(Linux))

 Program Jd;
uses dos,sysutils;
const mm=**;
var
i,j,k,l,m,n:longint;
tit,s1:ansistring;
t1,t2:extended;tt,jj:boolean;
function fc(ss1,ss2:ansistring):boolean; //标准比对模块,千万注意无论是正常退出还是中断的都必须关闭文件,否则会导致很快报错
var s1,s2:ansistring;f1,f2:text;
begin
assign(f1,ss1);reset(f1);
assign(f2,ss2);reset(f2);
while not(eof(f1)) and not(eof(f2)) do //有效行的比对
begin
readln(f1,s1);readln(f2,s2);
s1:=trimright(s1);
s2:=trimright(s2);
if s1<>s2 then
begin
close(f1);close(f2);
exit(false);
end;
end;
while not(eof(f1)) do //多余行的比对
begin
readln(f1,s1);
if trimright(s1)<>'' then
begin
close(f1);close(f2);
exit(false);
end;
end;
while not(eof(f2)) do //多余行的比对
begin
readln(f2,s2);
if trimright(s2)<>'' then
begin
close(f1);close(f2);
exit(false);
end;
end;
close(f1);close(f2);exit(true);
end;
function judge:boolean; //总评测模块,可以按照自己的意愿增删功能,也可以完全改成纯测速器,那样子就不需要std了,然后直接返回True即可
begin
writeln('Running source...');
t1:=now;exec(tit+'.exe','');t2:=(now-t1)*mm; //now函数获取的时间单位为Day
writeln(t2::,'s'); writeln('Running std...'); //如果改成测速模式的话可以删除此段
t1:=now;exec('std'+tit+'.exe','');t2:=(now-t1)*mm;
writeln(t2::,'s'); exit(fc('std'+tit+'.out',tit+'.out'));
end;
begin
write('Program Name :');readln(tit);
write('How many (0 means unlimited):');readln(l);
i:=;
repeat
inc(i);
writeln('Test No.',i);
exec('fuck'+tit+'.exe',''); //启动数据生成器 repeat
tt:=judge;
if tt then
writeln('Accept')
else
begin //这边是当出现WA时自动暂停询问是否再测一次,当然了你可以按照你的意愿修改功能
writeln('Wrong Answer');
write('Continue this point?');
readln(j);if j<> then break;
end;
until tt;
writeln('---------------------------------------------------');
writeln;
until i=l;
end.

Jd

对了有人问我为啥要手写那么长的Fc模块,原因如下:

1.直接原因——我不擅长使用FC.exe(Linux下的diff)的输入输出管道而且调用起来麻烦;

2.然而更重要的一点是——这个Fc模块可以按照你的需求非常自由的修改(本程序中的是忽略行末空格和多余回车的,也就是常用的模式),比如说允许0.01%的实数精度误差,那样子只要简单修改下fc模块代码即可正常使用,而且在程序其他的地方也可以按照你自己的需要自由的增删功能,比如自动计算当前拍下来所有的点里面的正确率、平均耗时。。。

或者可以这么说——这个东西是Pascal写的(当然了欢迎大家做出来C/C++版的高级语言对拍器),这个是你作为一个OI党再熟悉不过的语言了,所以可以这么说,在这个里面只要你想要的功能都可以有,只要你能编出来(HansBug:更何况计算平均值这种东西我想对于已经需要大量对拍的Oier来说恐怕都不是问题吧^_^)

最后,欢迎各位优化(HansBug:其实按照JYY的说法,最好是在不很影响性能的情况下压缩代码长度,当然了Linux下每秒钟500+次的高速度还是希望保持的啦,然而在win下由于win本身创建子进程的速度就慢的很所以并不是很有办法TT,还有弱弱的说一句希望能保留我这个Jd的名字啦么么哒^_^)

一个很逗的东西——Jd的更多相关文章

  1. VBA 一个很神奇的东西

    百度经验参考:http://jingyan.baidu.com/article/4ae03de32663953efe9e6b47.html 今天奇迹般的发现了VBA,都怪自己平时使用excle不够多, ...

  2. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  3. 第一次玩博客,今天被安利了一个很方便JDBC的基于Spring框架的一个叫SimpleInsert的类,现在就来简单介绍一下

    首先先对这段代码的简单介绍,我之前在需要操作JDBC的时候总是会因为经常要重新写SQL语句感到很麻烦.所以就能拿则拿不能拿的就简单地封装了一下. 首先是Insert.Spring框架的JDBC包里面的 ...

  4. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  5. 翻了翻element-ui源码,发现一个很实用的指令clickoutside

    前言 指令(directive)在 vue 开发中是一项很实用的功能,指令可以绑定到某一元素或组件,使功能的颗粒度更精细.今天在翻 element-ui 的源码时,发现一个还挺实用的工具指令,跟大伙分 ...

  6. [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

    打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...

  7. [转载]config文件的一个很好的实现

    以下是转载于网上的一个很好的config文件的实现,留存以备案 //Config.h #pragma once #include <string> #include <map> ...

  8. route 一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机

    一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机. [root@NB Desktop]# route ...

  9. C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted

    今天做一个很简单的oj来温习下c 语言 题目如下 输入 3位正整数 输出 逆置后的正整数 代码如下: #include"stdio.h"int main(){ float h,su ...

随机推荐

  1. HDU-1862-EXCEL排序

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1862 这个题考的就是你对sort函数的掌握:会用sort函数对字符串,数字排序,只要懂得话题目很简单 ...

  2. 动软模板系列二(Model层模板)

    动软模板其实和CodeSmith的模板差不多 实现的原理是一样的,但是CodeSmith貌似只支持表生成,而且不够“国人化”,所以打算研究下动软的模板,如果熟练掌握后想必以后开发项目效率可以提高很多了 ...

  3. Linux笔记(六) - 压缩解压命令

    (1)压缩文件( gz):gzip-d 解压只能压缩文件,不保留原文件例:gzip a.txt(2)解压文件( gz):gunzip 例:gunzip a.txt.gz(3)打包目录(tar):tar ...

  4. MIPS 跳转指令BAL vs JAL

    今天调试程序,发现在windows和Linux下,diab编译的结果不一样,一个能跑一个不能跑.最后定位到了函数跳转上. 程序代码里的函数跳转写的是BAL,在windows下编译结果正常,在Linux ...

  5. POJ1088(dp)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 91574   Accepted: 34573 Description ...

  6. 应对linux下的闰秒

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6339470.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  7. .net 网站应对压力的一些方案总结

    开年比较空,抽时间写个博文,总结下自己工作里的一些应对网站访问压力的技术方案. 自己项目现在大概一天50W的pv.已从前端到后端的顺序总结下自己用的一些方案. 一. 前端页面: 1.首先减少资源的大小 ...

  8. for语句输出图形

    一.输出以下图形 ******************************** 用for...for...嵌套循环,内循环控制每一行的个数(即列数),外循环控制行数 class ForDraw { ...

  9. ODBC

    ODBC是80年代末90年代初出现的技术,它为编写关系数据库的客户软件提供了统一的接口.ODBC只提供单一的API,可用于处理不同数据库的客户应用程序.使用ODBC API的应用程序可以与任何具有OD ...

  10. java学习阶段三:运算符和结构学习

    import java.util.Scanner;/* * JAVA中运算符的学习: * 算术运算符:+.-.*./ 和 %,两个整数相除,结果还是整数. * 赋值运算符:=.+=.-=.*=./=. ...