acm pc^2的配置与使用
--------------------------------------------------------------------------------------
!!! 转载请注明: 转自http://www.cnblogs.com/jeff-wgc/p/4462182.html !!!
---------------------------------------------------------------------------------------
PC2 配置 & 使用
PC^2官网: http://www.ecs.csus.edu/pc2/ 或 http://pc2.ecs.csus.edu
Author : Yuansheng Xue
From : South China Normal University
Q Q:1348066599
E-mail : xysdavid@gmail.com
E-mail :1348066599@qq.com
下面是以Win7为例(XP也是差不多的)的PC2 v9.2.4 版本的配置方法:
一 安装 & 配置JDK
由于PC2是基于Java开发的,要用的话就要安装JDK或JRE.
JDK1.6下载地址:
JDK所有版本下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html?ssSourceSiteId=ocomen
下载后直接安装就可以了.
然后配置Java的环境变量,右键点击我的电脑->属性->高级系统设置->环境变量(XP是右键点击我的电脑->属性->高级->环境变量),在下面的系统变量里面找到path变量,点编辑,在变量值后面添加JDK安装目录中的bin目录的绝对路径,以我的机子为例,我的JDK的安装目录是D:\Java\jdk1.6.0_20,其下有个bin目录,路径是D:\Java\jdk1.6.0_20\bin,那么添加JDK路径后的变量值就是:
然后找到classpath变量(如果没有的话新建一个),把JDK的lib路径添加到变量值中,同样不要忘了分号.
这样,JDK就配置好啦!
二 解压安装PC2
这个……应该不用多讲了吧,注意不要解压到的路径不要有中文就OK了.
三 编辑pc2v9.ini文件
在PC2的根目录下有一个pc2v9.ini文件,里面存的是服务器的IP和接入端口,用写字板打开它(用普通的记事本打开的话看起来可能会很乱),然后我们看到是里面的内容是这样的:
接下来我们要修改的就是Site 1的server地址和下面remoteSever的地址为服务器的IP地址就可以了,端口不用改.
如果配置服务器的时候不知道本机IP地址的话,可以点开始->运行,输入cmd,弹出一个黑框,在里面输入 ipconfig 回车,就会看到很多本机的网络连接的信息
如上图所示,IP Address那一行显示的就是本机的IP地址,填到pc2v9.ini文件,修改后的pc2v9.ini文件内容如下:
这样, pc2v9.ini文件就配置好了,然后把这个文件复制到PC^2根目录下的bin文件夹里面(不可以缺少的操作).
配置到这里,就可以供比赛选手使用了.如果是裁判机,还要继续往下配置.
四 配置编译器
配置编译器其实就是配置编译器的环境变量路径,和配置Java的环境变量是一样的,下面以配置codeblocks自带的GNU C++为例.
在codeblocks的安装目录底下的MinGW文件夹里面找到bin和lib文件夹,把
两个文件夹的绝对路径按照配置JDK的环境变量一样,分别添加到path变量和classpath变量里,添加后如图所示:
这样,编译器就配置好了,其他编译器的配置方式也是类似,把bin文件夹和lib文件夹的路径分别添加到path变量和classpath变量的变量值里面就可以了.
配置好编译器之后,结合PC2,就可以做一台裁判机了.
五 配置服务器和比赛
(1) 服务器:
在复制pc2v9.ini到bin文件夹以后,执行bin文件夹里面的pc2reset.bat重置一下(重置后,所有比赛配置都要重新设置,后面会讲如何设置比赛配置),然后打开pc2server.bat,就会弹出下图这样一个框:
在name和password都输入默认账号密码site1,点Login,然后弹出一个框Enter contest password,这个框貌似填什么都可以,我平时都是填site1的(如果没有重置的话,要填写和上次填写的一样的密码).
这样,服务器就建好了.
(2) 用管理员账号设置比赛
打开bin文件夹下面的pc2admin.bat,就会弹出一个和前面类似的登陆框,我们用管理员的帐号密码administrator1登录,就会看到如下一个窗口:
然后就可以按照下面的步骤配置比赛:
① 配置编译器
选择Languages选项卡,如下图:
点Add,会弹出下面这样的框:
以配置GNU C++编译器为例,在Auto Populate with 里选择GNU C++,会出现如下信息:
如果是linux,到这里可以点Add添加这个编译器,但如果是windows的话,要在Executable Filename和Program Execution Command Line两行的信息的后面加上“.exe”,如下图所示:
然后点Add,就添加了一个GNU C++编译器了(Microsoft C++的配置也是一样,不过非正版的VC自带的MS C++编译器在配置好之后经常会在比赛中编译不了代码,原因不明,所以这里使用GNU C++为例).
如果是配置Java编译器的话,设置如图(其实就是默认设置,不用修改)
② 设置题目
选择Problems选项卡,如图所示:
点Add添加题目的数据,如图:
在Problem填写题目名称,在Run Timeout Limit填写题目的限时,以秒为单位;如果这道题是有输入数据的话,勾选Problem Requeres Input Date,如果要选手们以文件操作的形式读入数据(要在main函数开头添加freopen(…)之类的函数才可以读入数据),则在Team Reads From里选File,如果要标准输入输出的话,选Stdin,然后点Input Data File里面的Browse,选择输入文件路径(路径最好不要有中文,不过PC2 V9好像支持中文,V8的不行),同样,无论有没有输入,绝大多数都是有输出数据的,所以就要有一个标准的输出数据文件,用来与选手的输出作对比,勾选Judges Have Provided Answer File,点Browse这是输出数据文件路径,下面以设置a+b为例:
输入文件内容(a+b.in):
1 1
2 2
输出文件内容(a+b.out):
2
4
输入方式是标准输入输出,配置后如图:
对于中间的Judging Type选项卡,是选择机器自动判题还是人工判题的,默认是人工判题,一般来说都是人工判题,以免机器出现错误,所以保持默认不用修改.
点击Validator选项卡,如图所示:
这个是选择输出数据的比较方式的,会选择Use PC^2 Validator,然后在Validator Option选项里有5种:
1- diff
选手输出数据和标准输出数据若有一点点不一样,返回结果就是No-Wrong Answer,就算是多了一个空格或者是回车符,都算是不一样,只有完全一样的时候才是Yes.
2- ignore whitespace at start of file
忽略输出文件开头的所有空格后用1的方式比较.
3- ignore leading whitespace on lines
忽略每一行开头的所有空格后用1的方式比较.
4- ignore all whitespace on lines
忽略所有空格后用1的方式比较.
5- ignore empty lines
忽略所有空行后用1的方式比较.
在我配置的时候,一般都是选择第1种方式,然后判题的时候机判为Yes的就直接返回,No的再人工比较一下数据的异同(具体操作会在第七部分讲解).
最后,点Add,就添加好一道题了,这样题目就配置好了.
③ 设置比赛的各种账号
选择Account选项卡,如图:
点Add可以添加账号,如图所示:
Account Type可以选择账号类型,有Team,Judge和Scoreboard账号,Team是选手用的账号,Judge是裁判用的账号,Scoreboard是用来看排名的账号(不过一般不用这个看排名,看排名的方式后面会讲),最上面的Account指的是比赛的账号,不过这个不可以由自己填,PC2会根据你设置的序号给你分配账号,在Display Name里面可以填写这个账号在排名里显示的名称(一般来说比赛选手的账号才需要修改这项,也就是比赛队伍的队名),password和password confirmation填写的是密码和确认密码(必须一样),右边选择的是账号的权限,不用管.
下面添加一个裁判账号示例:
然后点Add就添加了一个裁判账号,在Account选项卡里面会有显示:
选中这个账号,点Edit,可以看到:
之前Account里面没有显示信息,现在有了,那个就是登录用的账号,如果再定义一个裁判账号的话,Account就会是judge2,以此类推.
添加比赛队伍账号:
这里设置了队名是super_star,那么在排名board上就会显示这个名字,同样,我们点Add,添加这个账号后,再在Account选项卡中选中这个账号,点Edit,就会看到:
这个队伍登录用的账号就是team1,第二个设置的队伍就是team2,以此类推.
添加Scoreboard的账号也是类似,这里就不多讲了.
那如果要批量添加账号怎么办?当然是有办法的,我们可以在Account选项卡中,点Generate,弹出这样一个框:
我们看到,有Administrators ,Judges ,Teams和Scoreboards,4种账号括号里面显示的数字是这种类型已经有的账号的数量,图里显示的有1个管理员账号,1个裁判账号,1个队伍账号,没有排名板账号,如果我们要添加10个队伍账号,可以在Teams对应的那行的框里面填10,点Generate Accounts for Site 1,就添加了10个队伍账号了,在Account选项卡里可以看到,如图所示:
选择不同的账号,点Edit,就可以看到登录的账号名称和修改Display Name了.
但是,所有队伍的名字都要一个一个修改的话,工程量很大,有没有办法可以一次过修改完呢?答案是,有!
首先要Generate的方式建立好待修改的账号,然后要有一个txt文件,里面要存有账号,密码和显示名称的信息,格式如下:
site统一都是1,account就是要修改的账号,password就是密码,displayname就是显示名称,值得注意的是,整个文件写好以后,在最后不可以有空行,拿上面那个文件为例,在Team Ten最后就是文件结束,不要有回车符,否则Load的时候就会错误.
回到PC2的Account选项卡,点下面的Load,就会弹出窗口选路径,选择写好的存有比赛选手信息的txt文件,选好以后,会弹出一个窗口,显示的是PC2读取出来的文件里存的信息,对于上面的文件,读出来的信息如下:
点Accept ,Account选项卡里面就会显示:
这样就配置好了,不过写那个文件还是需要一点点时间,如果选手报名的时候就把信息以这样的格式提交上来的话就好办很多了.
OK,到这里就配置好账号了.
④ 设置比赛时间
选择Time选项卡,就看到比赛的时间信息:
选中site1,点Edit,弹出设置时间的小窗口,如下:
Contest Length可以设置比赛的总时间,Elapsed Time可以修改已经过去的时间,Remaining Time可以修改剩余时间, Elapsed Time和Remaining Time填的时间加起来一定要等于Contest Length的时间,否则会提示出错.勾选Stop clock at end of contest.
点Update就完成设置.
点Start,比赛就开始,选手也可以开始提交代码了.
六 选手端的使用
打开bin文件夹下的pc2team.bat(打开之前需要将由管理员配置好的pc2v9.ini文件复制到bin文件夹里面),弹出登录框,参赛队伍各自填写属于自己的帐号密码登录,登录后界面如下:
左上角显示的是STOPPED,说明比赛还没有开始,不可以提交,当STOPPED转为时间的时候,就可以提交代码了.
提交代码的时候,先选择要提交的题目,在Problem里面选择,然后在Language里选择语言,然后点Main File里的Select选择提交的代码文件,要注意的是,提交的文件的后缀名必须是“.cpp”(Java的话是“.java”),同时,文件名里不可以有空格,否则提交的文件无法编译,裁判判题的时候将返回No-Compilation Error,如图:
对于本身存在语法错误的代码也会返回上面的错误.
如果出现如下错误,则是数组下标溢出或者是递归栈溢出:
下面的错误就很明显了,你的代码输出的结果是错误的:
如果返回的是No - Time-limit Exceeded,说明你的算法可能不够优,或者出现死循环了.
如果你获得的是Yes,恭喜你,你的代码是正确的:
选手端还可以发信息给裁判,询问裁判一些他们有义务回答的问题,比如题意没有说清楚的时候,选手可以进行询问,方法就是,选择Request Clarification,如图所示:
如果是针对某题的提问,就在Problem里面选择题目的名称,如果不是,就选择General,然后在Question里面填写询问的内容,考虑到PC2对中文的兼容性,建议选手们用英文提问,然后点Submit Clarification,提交给裁判,等待裁判的回复.如果裁判认为选手没有理解好或者理解错题意的话,就会出现以下回答:
这就是询问裁判的方法.
View Runs可以查看自己的提交记录.
View Clarifications可以查看自己的询问记录.
Options 里面可以显示PC2运行日志,那个东西本人也看不懂,选手们最好也不要乱点.
至于Submit Run选项卡里面的Test功能很少用到,这里也不多讲.
选手端的操作就讲这么多.
七 裁判端的使用
打开bin文件夹下的pc2judge.bat(打开之前需要将由管理员配置好的pc2v9.ini文件复制到bin文件夹里面),弹出登录框,输入裁判各自的帐号密码登录,登陆后的界面:
当有队伍提交代码的时候,就会是这样:
从上图可以看到,有一个队伍提交了代码,选择那个提交,然后点Request Run,弹出如下的框:
点Execute Run,开始编译执行这份代码,执行结束或者运行时间已经达到了本题的限时,就会停止,弹出一个框显示这份代码输出的数据,如图:
这时,点关闭这个框就可以看到机器判的结果,如图:
如果是Yes的话,就说明和标准输出文件的数据是一模一样的,点Accept Validator就可以把这个结果返回给选手.
如果是NO-…的话,点Compare可以和标准输出文件进行人工比较:
如果数据是和输出文件一模一样,只是因为代码的输出在最后比标准输出文件多了一个回车符,裁判可以自行选择Yes把此代码判为正确,并返回给选手.自行选择的方法是,在下图标记的地方选择要判定的结果,点Accept Selected确认,并返回给选手.
如果在判题的过程中,出现了某些意外,一些已经判过的提交需要重判,可以选All Runs选项卡, 选中要重判的提交,点Rejudge进行重判,如图:
裁判的判定就是这样的.
裁判还有一件工作就是回答选手们的询问,当有人发送询问的时候,会有红色的字显示在上边,如图:
点New Clars,可以查看询问内容:
下面的白框显示的就是询问的内容,在上面的白框选中选手的询问,点Answer,在下面的白框输入文字进行回答,如图:
点OK,就可以发送给询问的选手,如果裁判觉得这个问题可能大多数选手都会有,可以勾选Send to All teams,再点OK,就可以把这个询问和回答发送给所有参赛选手,这样所有选手都可以看到了.如果裁判觉得这个问题裁判没有义务回答,或者题目已经说明了,选手没理解,就可以点Default Answer,可以自动回复这句话: NO response, read problem statement,选手就会看到:
这些就是裁判的操作.其他选项卡很少用到,可以忽略.
八 查看排名
如果管理员设置了Scoreboard账号,就可以打开bin文件夹下的pc2board.bat打开scoreboard的登录界面(打开之前需要将由管理员配置好的pc2v9.ini文件复制到bin文件夹里面),输入相应的账号密码登录,登录后就可以查看排名了,如图:
其中Solved是指做出的题目数,Points是罚时.
这个排名没有显示各题的提交情况,在管理员机子的PC2的bin文件夹下的html文件夹里,有一个summary.html的html文件,打开后就可以看到各题的提交情况和各队伍的提交情况,如图:
如果用管理员的机子建立一个http服务器,就可以让所有选手都看到排名了.
具体操作:
(1) 用服务器工具建立http服务器(本教程里附带有一个小型的http服务器工具,本工具使用的时候要把IE主页改为http://www.haha111.com/,否则无法使用).双击SimpleHttpSvr.exe打开工具,在状态栏就会有个小图标,点击打开,显示如图:
把服务路径修改为PC2 目录下的bin\html文件夹,如图:
然后点击开始服务,如果服务路径变成不可以修改的样子,就说明服务器搭好了,如图:
再次提醒,如果不把IE主页改成http://www.haha111.com/的话是无法使用此工具的.
这样,如果管理员机的ip是192.168.1.100的话,就可以通过这个链接http://192.168.1.100:8089/summary.html(注意不要漏了端口8089)
访问管理员机里的summary.html查看排名了.
以上就是本文档的所有内容,谢谢阅读!
如有疑问,可以发邮件到本人邮箱或者直接下面留言评论,虽然我的能力有限,但还是希望能够帮到你.
--------------------------------------------------------------------------------------
!!! 转载请注明: 转自http://www.cnblogs.com/jeff-wgc/p/4462182.html !!!
---------------------------------------------------------------------------------------
谢谢!!!