这个嘛是本人专门为了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. python关于列表的操作

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类 ...

  2. SQL 存储过程 触发器 事务

    一.存储过程 存储过程:就像函数一样的会保存在:数据库中-->可编程性 --> 存储过程 创建存储过程:create proc JiaFa --存储关键字proc @a int,      ...

  3. 【翻译】理解Joomla!模板

    最近在摸索Joomla的模板开发,看文档的时候心血来潮就干脆把这篇翻译过来,第一次翻译技术文档,肯定有很多错误,希望大家多多批评指正. 原文地址:https://docs.joomla.org/Und ...

  4. 微端游戏启动器LAUNCHER的制作之MFC版一(序和进程通信)

    额...刚开始信誓旦旦说要写launcher制作的博客,还没写完就被抛到脑后了真是没毅力.最近把之前写的wpf的launcher改成了mfc版,遇到很多问题,写了三个星期才写完,好好记录一下吧.我也想 ...

  5. IP分类以及特殊IP

     一.IP分类 点分十进制数表示的IPv4 地址分成几类,以适应大型.中型.小型的网络.这些类的不同之处在于用于表示网络的位数与用于表示主机的位数之间的差别.IP地址分成五类,用字母表示:       ...

  6. IOS9.0 之后友盟分享详细过程

    一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...

  7. Myeclipse删除default包

    MyEclipse删除default包(不显示default包) 很多时候,我们一不留神会出现下方这种情况,这个default包真难看 这里直接提供解决方案 之后点击这个Filter,然后去掉Empt ...

  8. phpcms的安装以及简单使用

    先来说一下phpcms的安装 首先从网上下个phpcms的压缩包,解压 解压后就是个这样的文件夹 这里要注意,下载的时候要放在平时存动态网页的那个地址,www目录下,如图 点开phpcms文件夹,里面 ...

  9. api接口json串换行

    1.问题描述:在后台输入框中明明回车换行了,但是返回到 app客户端显示出来的 确实带有 \n  这个时候无论怎么调试都不行: 2.铺垫:大家都知道 php输出字符串的时候  使用 单引号 比使用 双 ...

  10. HashTable源码分析

      本次分析代码为JDK1.8中HashTable代码.   HashTable不允许null作为key和value.   HashTable中的方法为同步的,所以HashTable是线程安全的. E ...