PC^2个人使用总结

1、这是一个简易快速的搭建,祥细请参考pc2v9AdminGuide.pdf
2、很多问题都是采用最简单直接的解决办法,并不一定是最好的办法
3、我也是第一次自己搭建这个环境,协助我们友校搞了一次校赛,觉得效果还可以
4、搭建过程完全都是结合网上的资料加上自己摸索的,错误和不足之处欢迎指正、交流
5、我用的版本是9.5,已经修复的bug这里不会提及
QQ:424308425
E-mail:[email protected]


1、准备工作

先介绍一下这个平台:PC^2和OnlineJudge不同,判题不在服务器上。服务器site端负责比赛的数据交换。判题在judge端进行(找几台普通电脑装好环境就OK)。我们这次是1台server+7台judge的配置

安装包
PC^2官网:http://pc2.ecs.csus.edu/
百度网盘:http://pan.baidu.com/s/1kVaK8MN

site机器:所有的数据都存在这个电脑上,team和judge都和他交互,建议在比赛中使用一个site。最好是8G内存或以上,系统最好是linux,我用的是Ubuntu。关于为什么不用windows,在win环境下,中文的队伍名会乱码,这个原因我觉得是软件内部的编码问题。

判题机:装好比赛用的环境,代码运行在判题机上计时。系统随意

2、添加比赛

pc2是基于java的,这里默认你已经配置好了site/board机的java/apache环境、judge机需要的java/C/C++环境
下面提到的脚本都在pc2-9.5/bin下
windows双击对应的bat文件
1、修改pc2v9.ini
所有脚本运行都需要这个文件,在哪个目录调用脚本,就拷贝到哪个目录。#Site 1下面的ip改成site机器的ip,端口不动
2、启动pc2server
账号和密码都是server1,只有site机器可以登录
接下来要你设置比赛的密码,以后再登录site之后都需要输入这个密码
把它最小化放在一边(不能关闭),基本上用不到了
说明一点:pc2里面所有需要登录的地方,如果没有改过密码,可以只输入账号不输入密码,直接点击登录即可
3、启动pc2admin
初始账号和密码都是administrator1,账号用root也可以。这里面可以配置、监控比赛

  • account
    点击generate生成账号
    administrator:管理员(监控和修改比赛数据,两个就够)
    judge:裁判(处理选手提交的Run请求并返回结果,回答选手的提问,数量根据比赛规模确定,100个队伍的情况下,7个就够)
    team:队伍(提交Run请求,发起提问,数量设为参赛队伍+1,额外的一个测试用,设置不显示在榜上)
    scoreboard:榜单(登录这种账号的机器会在bin/html下生成html文件,把apache的工作路径设置成这里,队伍就可以访问榜单了,数量1个)
    feeder:连接icpctools用(我们没有用到)
    Start Account Number at:默认为0即可
    点击生成就可以了
    这里面生成的账号数量是增加多少,比如原来有1个,填1就是再生成1个,一共两个
    账号一旦生成就不能删除了,强迫症患者(本人就是)注意一下

  • 配置账号
    生成的账号和密码都是一样的,安全性极低,点击下面的save可以导出到文件。然后用txt编辑器打开复制到excel里面,把displayname都换成队伍名,password给每支队伍设置随机密码,其他的不用动。再把excel里面的内容复制回txt文件里面,然后点load导入信息即可。导入之前需要注意一点,pc2admin里面的各种账号要对应大于文件里面的,比如文件里面有150个team,那pc2admin里面至少要有150个team,其他类型的账号同理,否则导入不了。也就是说load只是导入数据,并不会创建账号
    之所以要导出再导入是因为pc2admin里面只能一个一个改密码,改名字什么的非常麻烦

  • language
    添加比赛支持的语言,java参数默认,C和C++里面把Judge execution command line打钩。这个是一开始我在虚拟机做的时候发现的问题,C和C++不打钩的话判题会编译错误,我也是抱着能用就行的态度没有去了解为什么。其他的语言没有测试过

  • time
    默认5小时不用动,至于那个自动开始和结束比赛我都没用,就是开始的时候过来点一下Start,结束的时候点一下Stop

  • problem
    点击Add添加题目
    General:
    题目建议设置为Problem A:a+b这种形式,short name可以不填,时间单位是秒,填1即可。把Problem Requires Input Data打钩,选择Stdin,然后浏览选择一个输入文件。把Judges Have Provided Answer File 打钩并选择一个输出文件,其他不动
    Judging Type:
    选择Manual Judging,至于那个Computer Judging容易出问题
    Output Validator:
    选择Use PC^2 Validator,这里是判题用的比较器,第一个是输出必须与标准格式一模一样才能Yes,其他的简单翻译能理解,我选择的是第四个
    然后点下面的Add题目就添加成功了
    这里需要注意几点:数据文件的文件名不能有空格,尽量把不同的题目数据放在不同的文件夹下防止手抖,我这里采用的是创建一个problem文件夹,然后在里面创建A~J 10个文件夹放对应题目的数据

  • profile
    在这个里面是每一个profile都是一场比赛,建议在比赛前clone一份出来,开启clone的比赛测试一下,没问题就可以了。switch可以在不同的比赛之间切换。这里如果切换了比赛,重新登录pc2server的时候,应该输入目前活跃(Active)的比赛的比赛密码。

  • Settings
    这里可以设置比赛的名字,不能直接输入中文,需要中文的话在其他地方打好粘贴进来就可以
    注意一下Maxnum output size,如果队伍提交的代码输出的字符总量超过这个大小就会直接判超时,设置成比最大的输出文件略大一些就可以

  • Team Status
    很方便,能看到谁没来参加比赛

  • Runs
    处理一些卡死的Run请求,选中勾上delete即可

  • Finalize
    终止比赛用,设置金银铜名次,这里是截止名次而不是数量,只有剩余时间为0并且比赛stop才能使用,剩余时间是可以改动的

3、其他工作

1、榜单
登录在pc2admin里面生成的scordboard账号,在哪个机器登录,就会在哪个机器的pc2-9.5/bin目录下生成html文件夹,在这台机器上装好apache环境并指定好路径,选手就可以通过ip查看榜单。里面的是html文件是即时生成的,榜单发生变化的时候,就会更新文件,需要封榜的时候把pc2board退出即可。我做的时候是把board、admin和server都运行在site服务器上面了

2、裁判员
在judge机器上启动pc2judge,登录judge账号,让裁判员就位并安排好判题流程

3、选手
选手打开pc2team,登录举办方分发的账号密码等待比赛开始。

4、需要注意的问题

网上流传的问题

  • 据说site机器后期很吃内存,请更改pc2server启动脚本把第10行和第11行(不一定就在这两行上面)
    JAVA64BIT_HEAPSIZE和JAVA32BIT_HEAPSIZE两行后面的参数改成7G
  • 如果在problem的Test Data File选择“keep”开头的那个,答案的输出数据后缀只能是.ans
  • 如果在problem的Test Data File选择“keep”开头的那个,每个题目的数据的名字要求不同。
  • ubuntu下面启动pc2脚本的时候记得加上 & 不然要开很多终端,会显得很乱
  • 虽然pc2judge带有autojudge功能,而且可以多开,效率高,但是遇上一些奇妙的程序就会卡死,所以现场赛不建议使用
  • 在判题的过程中如果judge电脑卡死,记住runid交给管理员,重启电脑即可
  • judge端界面AllRuns有个标签叫Suppressed,如果为yes,说明这个run没有给选手返回结果,rejudge即可
  • pc2reset会清空所有内容,谨慎使用
  • 脚本打不开是因为java环境,连接不上服务器是因为pc2v9.ini文件没有改ip或者网络不通

测试/比赛过程中遇到的问题

  • 我从头至尾没有用过打印机,选手无法打印代码,因为我(学生)没有打印机,自己没有测试过。所以比赛没用。
  • 关于送气球的问题?
    我们给志愿者开了一台judge机器,打开All Runs,过滤Yes的Run请求。发一张队伍X题目的表格,看到有Yes的Run请求出现就在表格对应的地方打钩,避免重复提交重复送气球。之所以没有用balloonUtil是因为听说工作时间长会出问题,还有一方面的原因就是我还没有测试这个工具
  • 正式赛之前突然发现所有team都无法登陆?
    提示账号未激活,因为导入的文件permlogin
    一列本来是true被改成了false。如果不知道导入数据的参数怎么填写,可以用admin生成一个team并导出,根据这一行记录对照填写即可

  • 发现数据有误并更改发现裁判仍然判错?
    更改数据文件之后,要找到对应的题目重新导入文件,并且judge要重新登录

  • 热身赛发现一部分C程序如果不return 0,会报CE
    原因不明,所有C程序用int main(),并return 0

5、总结

PC^2在现场赛的表现比OnlineJudge要出色很多,虽然在设计上有一些反人类的地方,但是在配置管理上更专业一些。
还有很多功能这里都没有提及,而且我没有去研究,我只是测试了需要用到的一些功能,其他的可以自行摸索或者查看参考手册,如果在使用过程中遇到问题,欢迎咨询我或者咨询专业人士。

你可能感兴趣的:(PC^2个人使用总结)