PC^2使用指南

写在前面
1.排版混乱,看完再下手也不迟,避免掉到坑里。。。
2.本文仅供参考,一切以pc2v9AdminGuide.pdf和实际试验情况为准
3.写的比较匆忙,如果有什么不对的地方,欢迎指正!如果有疑问,欢迎交流。
4.转载请注明出处   http://www.cnblogs.com/xuwangzihao/p/5998333.html   谢谢。
QQ:782927718
E-mail:fffgrdcc@163.com
作者:NEU_徐王

名词解释
核心机器(site):所有的数据都存在这个电脑上,所有的team和judge都和他交互,如果site挂了,比赛就挂了,虽然据说可以做成分布式的,不过没试过。建议在比赛中使用一个site(就是site1),我们姑且把site理解为数据中转枢纽吧。

如何从零开始使用pc^2搞起一场比赛
//以pc2-9.3.3为例
//pc2是基于java的,我默认你已经配置好了site的java环境,board机需要的apache环境和judge机需要的java/C/C++环境
==========================================================
0.如果是linux系统,建议把pc2的bin目录配进环境变量Path,这样调用脚本方便。

==========================================================

1.修改pc2v9.ini//这个文件时启动pc2各种脚本时必须的,在哪个目录调用的脚本,请确保在那个目录有该文件,比如我的pc2装在/home/neuacm/Documment/下,但是我的pwd是/home,那么我就需要在/home目录下有个ini文件,否则会报错
在[client]标签后,# Site 1的下面,固定比赛使用的核心机器的ip,端口默认50002,不要改。
==========================================================
2.启动pc2server
账号密码都是site1,且不能修改。//不用担心会被其他人登录,因为所有和该比赛相关的机器使用的pc2的ini文件都把site1的ip固定了
设置比赛密码//这个密码在你第二次登录site的时候和切换比赛的时候会被要求输入。避免有人在核心电脑偷偷修改比赛数据。
然后server就没什么用了,把它放一边,但是千万不要把它关了!!!如果site被关闭,pc2的任何脚本都无法运行(当然pc2server除外)
==========================================================
3.启动pc2admin
初始账号密码都是administrator1,进入后我们可以在此设置比赛所有信息,和监控正在运行的比赛的所有信息

-----------先说设置比赛Configure Contest---------------

先设置account,点击Generate批量生成账号,账号有如下五种
管理员(administrator):可以监控比赛和对比赛进行修改。建议两个,有个备用的方便
评测员(judge):可以对选手提交的评测请求(run)进行评测并返回结果,可以看到所有run的信息(包括源代码),可以申请重新评测,可以处理提问(Clarification),可以进行广播。建议7+1,7个用来测run,1个用来答疑
参赛队(team):可以提交run和Clarification,并接收judge返回的信息。建议n+1个,多出来的可以设置为不显示在榜(scoreboard)上,做赛时测试用。
得分榜(scoreboard):生成榜单网页用,打印气球用。。。。(貌似还有别的功能,不过我没用到),建议3个,一个用来生成现场的榜,可以接网线让外网也可以访问,一个打印气球用,一个备用
事件反馈器(feeder):连接icpctools用,建议一个//随便翻译的,轻喷。。//9.3.3版本里是个下拉菜单显示的,然而菜单里只有FEEDER一个选项。。。不排除以后会有变化的可能性,具体请参考文档
最后一行有Start Account Number at,不用填,默认为0.
点击生成,然后关闭。
在这时候就有很多账号出现了,对每一个除了team外的账号edit,更改密码(默认密码就是帐号名,不安全),然后点击load,按照guide的要求导入选手信息,最后一个多出来的选手账号,点击edit,更改密码,更改Shonw on scoreboard displays权限为fallse(这样,这个账号就像是从来没出现在这场比赛一样,不影响排名,不影响FB,但是可以交题,并且被评测返回结果,用来正式比赛提交标程,比选手更快发现问题)
//注意的是,这里生成里面填的数字是“新生成多少个”,比如需要200个队,现在已经有199个队了,只要再生成一个就好,千万小心,因为添加进去的账号就不能删了,虽然可以通过修改权限让他变得和没有一样,但是多了后一个个改太烦了2333
//需要注意的是,load的时候,现有team'数必须大于等于导入文件里面的team数,否则会导入失败,不会自动帮你创建账号的,load只负责批量修改

然后设置judgement,
其他都用默认
把TLE的那个改一改,和pc2judge中的状态名字保持一致,否则会不算罚时

然后设置language,
添加比赛支持的语言,参数默认的就可以跑,如果有要求,在compile cmd line 的选项里{:basename}前修改(c++11 -O2之类的)

然后设置time,
默认5h,不用动
开启比赛的时候,在这里点击start
结束的时候,点击stop

然后设置setting,
改比赛名字
改输出文件大小限制(改的比最大的答案大就行,否则肯定谁交谁WA)
改Scoring Properties(罚时规则),默认就行,CE不算罚时,NO都是20一次

然后设置problem,
点击add添加题目
general里设置名字,短名(注意短名不会显示在team的问题的下拉菜单里,为了选手友好,建议题目名的命名为X.xxxx,例如“A.a+b”,短名就ABC那种就行),设置时间限制,单位为秒,选择需要输入文件,下面的team reads from如果选了file,选手需要在程序里写上freopen,所以我们选stdio就好,选择需要答案文件,然后不用点Browse,这个一会儿设置。show output和show compare是和judge有关的,默认选上就好,hide problem是题目不可见,因为添加了就不能删除,所以有这个来弥补,默认未选中就行。
Judging Type里设置judge方式,因为autojudge容易卡死,所以建议人工jude,使用默认设置的Manual Judging就行,下面的CCS默认不勾选就行。
Validator里设置的是比较方式,我们选择Use PC^2 Validator,然后选“4 - ignore all whitespace on lines”,这是出题人派来的裁判说的,因为PE不算WA。。。。//第一次知道
Data Files里面选择“Keep Data Files external to PC^2(requires you to copy files to judge's machines)”,因为另一个是走网络传输的,担心是每次judge都会传输一次,容易出问题,不敢用。然后点击load,指定到该题目数据所在文件夹。//第一次点击keep那个选项的换会弹出一个窗口“Set External Data File Path”,这个设置的是评测机的数据路径
回到general里看下,Input Data File和Answer File里是不是有东西了。
//这里需要注意以下三点
//1.数据文件的文件名不能有空格,否则会评测失败
//2.如果在problem的Datafile选择“keep”开头的那个,答案的输出数据后缀只能是.ans,选的是"Copy"那一个的话则无所谓
//3.如果在problem的Datafile选择“keep”开头的那个,每个题目的数据的名字要求不同。
//4.尽量把不同题目的数据放在不同的文件夹内,避免手抖搞错,或者自动识别文件的时候出问题
//配置specialjudge的话请看pc2根目录下doc目录下的pc2v9AdminGuide.pdf,ubuntu下只要把参数前面加个./就可以,配置的话还有checker怎么写看文档。

然后设置Notifications,
添加打印气球用的scoreboard,一个就够了,建议和做榜单的账号分开。

然后设置autojudge,
如果要开启自动评测的话。可以让不同的评测账号对不同的题目有权限auto,不过我们是人工判题,所以用了默认——都没有权限

然后设置profile,
在这个里面是每一个profile都是一场比赛,可以有不同的设置,建议在比赛前clone一份出来,开启一次test一下,copy版本的比赛没问题,应该就没问题了。switch可以在不同的比赛之间切换。要注意的是,这里如果切换了比赛,重新登录site的时候,应该输入目前活跃(Active)的比赛的比赛密码。

然后就可以了。

-----------然后是监控比赛Run Contest---------------//这里是比赛进行时候用的,设置的话,pc2admin的工作已经结束了,快进到下一个等号分割线

说几个比较有用的,剩下的读文档吧

Team Status:
看team们的连接情况的,很方便知道谁提前登录了,谁没有来参加比赛

Runs:
看选手提交记录的状态用的,admin这边主要用来删掉一些一直处于“Being_Rejudged”状态的run用的,这些是把judge卡死后遗留下来的(我怀疑是bug)没有任何评测机在评,但是显示在评测。删除的方法很简单,选中后把delete勾上就好。

Finalize:
终止比赛用的,点开可以设置金银铜终止名次(注意是终止名次,不是奖牌个数)
需要注意的是,剩余时间必须小于等于0且stop后才能终止,相关设置在ConFigureContest的Time中//剩余时间是可以改的嘿嘿嘿

其他的没啥用了。。。
==========================================================
4.打开pc2ef(icpc tools连接用)
在event feed中点击start开启服务
//web server无视就好,据说很不好用
放一边就好了,别关掉,因为有些icpc tool会访问eventfeed(ef)。//不过发气球的icpctool实战证明半小时左右就不行了,初步怀疑是ef刷新过快,后期文件比较大,每次没读完就被终止了的原因
这个主要是最后比赛结束后导出简单的比赛数据用的。//给resolver用
导出数据是这样的,点击view,点击save就行
==========================================================
5.把比赛数据拷到每个裁判机的指定目录下
==========================================================
6.评测机打开pc2board//如果报错,检查题目数据是否在指定目录下
==========================================================
7.在board机开启pc2board
此时就生成了summary.html,在pc2根目录的html目录下,需要其他人访问的话请修改apache配置文件指向此
封榜的时候,只需要关掉pc2board就好,这个summary是它实时更新的,关了就停止更新了
==========================================================
8.选手打开pc2team,等待比赛开始
==========================================================
9.在admin中的time中选中后点start,比赛开始。
==========================================================
需要注意的问题
1.site据说在比赛后期很吃内存,所以请更改pc2server的启动脚本,Java加上参数 -XXmx7G//因为我们的评测机总的内存为8G//告诉我们的人是官方派来的裁判,我们也不确定是不是真的
2.TLE默认会返回CE,原因是admin里judgements标签下TLE的名字和judge对TLE的描述里面的名字不一样,多个横杠吧,所以就默认算在CE中,而 CE不算罚时,删掉改成一致的就好
3.ICPC没有PE这一说,在problem的Validator中使用PC2自带的第四个:“ignore all whitespace on lines”
4.即使题目不需要输入输出文件,如果在problem的Datafile选择“keep”开头的那个,也需要设置in文件和ans文件,否则启动judge的时候会报错。//没有输入,比如helloworld,没有输出,比如special_judge
5.如果在problem的Datafile选择“keep”开头的那个,答案的输出数据后缀只能是.ans
6.如果在problem的Datafile选择“keep”开头的那个,每个题目的数据的名字要求不同。
7.启动pc2的时候,在“当前目录”下需要有需要的ini文件
8.ubuntu启动pc2时候在后面带上&,可以让进程在后台运行,避免每次启动pc2脚本要开一个新的终端这个尴尬的问题。
9.虽然pc2judge是带有autojudge功能的,而且可以多开,确实效率高,但是一旦遇上一些奇妙的程序或者恶意的程序就会卡死,所以现场赛不建议使用,还是人工效率高,八个judger都有点儿多,个人认为7个就够,一个专门的judger我们称他为buj(back_up_judger)给其他judge擦屁股(比如有的judge评完忘记给队伍返回结果,还有给恶意代码rejudge和查看源码,处理选手rejudge请求之类的),剩下六个只负责评题,卡死汇报runid给buj,然后直接重启,效率贼高
10.judge界面AllRuns有个标签叫Suppressed,如果为yes,说明这个run没有给选手返回结果(可能是judge手抖了),buj要时刻关注,及时返回结果。
11.pc2reset是清空所有数据用的,使用过后所有的比赛都会消失不见,慎用。
12.我们在win下从来就没有配置好题目过,所有返回的结果不是WA就是ERROR,建议全程使用ubuntu,不要给自己带来不必要的麻烦。人生苦短,我用ubuntu。
13.不是开玩笑,重启确实可以解决很多莫名其妙的问题,重启不行就加上sudo试试看(linux的权限问题,也可以用chmod +x,不过sudo更简单不是吗),评测有问题就在admin端重新加载一遍数据,ef时间对不上重启就好,board数据对不上重启就好,总之及时发现问题,及时reload。
14.比赛结束后尽快备份数据,滚榜和admin让两个人来做吧,尽快备份数据以免发生什么意外。//服务器被热心的志愿者收走之类的

研究pc2时遇到的问题
Q1.如果提交的代码没有用cin,scanf之类的开启输入流,autojudge会卡死
A1.未解决,因为后来都用人工judge,没有再出现这个问题了

Q2.pc2自带的打印气球一直连接不到打印机(不过邮件服务可以用)
A2.使用balloonUtil-1.1.0(icpctool)
PS.pc2打气球更多信息,详见pc2根目录下的\samps\scripts\loopprint或者咨询刘老师

Q3.balloonUtil-1.1.0出现未知bug,在一次测试中遗漏了至少一个气球。
A3.每半个小时人工比对一次已经出现过的发气球请求和目前的榜单,补发漏掉的气球。

Q4.autojudge会在某些代码编译的时候卡死
A4.卡死就重启,返回RE。

Q5.special_judge按照要求配置好后无法使用
A5.admin里面special_judge的默认参数前面没有"./",在ubuntu下不能开启脚本,加上就好。//win下没有测试过

Q6.TLE没有算罚时
A6.admin里judgements标签下TLE的名字和judge对TLE的描述里面的名字不一样,多个横杠吧,所以就默认算在CE中,而 CE不算罚时,删掉改对就好,然后rejudge之前的。
PS:罚时在admin-setting-Edit Scoring properies中设置

热身赛前夜遇到的问题
Q1.pc2judge打不开
A1.可能是评测机指定路径下没找到指定文件。

Q2.提交标程返回被评为WA
A2.1.数据文件的名字里有空格//这样会导致judge把文件名当作两个参数而导致出错
A2.2.可能真的是标程有问题,比如java的程序要求文件名和类名一致,但是标程文件名惨遭修改。
A2.3.格式错误,标准答案末尾看新没有另起一行,但是实际上末尾已经有一个'\n'了,不要手贱去动数据。//ubuntu下文件末尾一个'\n'不会显示换行,两个会显示一个新行。。。。所以肉眼看得像是没有换行
A2.4.错误的限制了输出文件大小,pc2默认是512kb(admin-setting中设置),这里应该修改,让他大于最大的.ans文件大小

Q3.pc2打不开
A3.加上sudo试试看,当前目录下有没有ini文件,site开了么。

Q4.fork炸弹之类申请调用很多计算资源的没法限制,会卡死评测机。
A4.遇到稍等,不行就重启,记录runid,返回re,如果是恶意代码,警告或者禁赛。

Q5.有的run的状态是“Being_Rejudged”但是没有任何一台评测机在评。
A5.可能是曾经卡死评测机的程序,在评测机重启的过程中迷失在进程里了,管理员edit它返回RE勾上delete就行

Q6.想finalize比赛但是提示所有的run都需要被judge才可以结束。
A6.去run标签看看是不是有的run的状态是“Being_Rejudged”,然后参考A5

热身赛遇到的问题
Q1.balloonUtil-1.1.0(气球打印用的icpctool)在开场半小时左右不工作了。
A1.人工对比

Q2.有选手说我们judge端不支持C++11
A2.需要在language标签设置下,pc2默认是不支持的。

Q3.装好的纯粹的codeblocks默认是没有自动换行的,默认不开启C++11
A3.选手自行手动配置下,或者找志愿者。

Q4.有选手问我们stack有多大
A4.官方派来的裁判说pc2默认是8Mb
PS.如果需要改,可以在编译参数那儿改。

现场赛遇到的问题
Q1.ef中出现错误数据
A1.发生机制不明。。。不过如果发现ef左上角的时间和admin的时间不同,就重启一次,然后发现数据没问题了。。。。好迷啊

Q2.代码打印出了问题。
A2.待解决。

Q3.比赛时间到了Stop后无法Finalize,提示依然有run没有judge完。
A3.手动del掉being_rejudge的“死run(就是评测机卡死重启后遗留的run)”,如果还提示有,只能手动在导出的xml文件后面添加标签,详情参考resolver使用指南。

未解决的问题
Q1.我怀疑site2不是让比赛分布式,而是可以备份比赛,site1由于某些原因突然offline的时候,比赛也可以基于site2继续,请后人做实验验证

Q2.pc2ef与当前进行的比赛不同步。。。虽然重启后解决了,但是不知道发生机制

Q3.开启比赛时候ef不能访问,现象是访问后闪一下就失去连接。。。不知道为什么。。。是不是在哪儿设置的

Q4.pc2的各种导入导出没用过。。。后人研究研究完善下,为了数据完整性我们把整个/home目录拷走了23333

Q5.在problem的Datafile选择“Copy”开头的那个,据说是通过网络传输答案到评测机而不需要人手拷贝,实测确实方便很多,但是不太确定是只会拷贝一次还是在每次run的时候都会重新拷贝,害怕在比赛时候出问题就没用,有条件可以测测。//以pc2所有设置都是实时生效的尿性,真的担心是每次都重新传。。。

Resolver使用指南
Resolver是一个ICPC Tool,Worldfinal的御用滚榜工具,可以从https://icpc.baylor.edu/icpctools/上下载到
本文基于resolver-1.1.0编写,入门级教程,轻喷。。。

//里面的->不是命令行,只是方便记忆用的流程而已

比赛结束后用pc2ef导出enevtfeed,保存名字为data.xml

备份一份data.bak

data.xml -> data.xml(no team,have winner) , pre_team_CN , suf_team
/*
如果比赛无法终止,手动在末尾</contest>标签前面添加(注意更改标签间的数据,timestamp为最后一个run的timestamp)
<finalized>
<comment>Mr.test</comment>
<last-bronze>114</last-bronze>
<last-gold>19</last-gold>
<last-silver>57</last-silver>
<time>0</time>
<timestamp>1477156621.093</timestamp>
</finalized>

worldfinal冠军默认为世界冠军,很尴尬,我们需要手动添加冠军
在</finalized>标签后添加(注意更改标签间的数据,<team>标签里是冠军队的编号,提前在board里看清楚)
<award>
<team>182</team>
<type>winner</type>
<citation>Champion in ICPC Shengyang site</citation>
</award>

把不打星的队伍的信息全部剪切出来(所有的不打星的队伍的team标签)放到pre_team_CN中
如果本来队伍就是英文名,这一步可以省略。

把打星的队伍的信息全部剪切出来放在suf_team中。
*/

pre_team_CN -> pre_team_EN
//使用替换工具把信息中的队名全部换掉,新的文件存在pre_team_EN中//替换工具具体的请往下看《替换工具使用说明》部分

pre_team_EN data.xml -> data.xml
//把英文的不打星的队伍信息放在data中,保存

data.xml --awards.bat-> re.xml
//打开awards.bat选择load local event feed从data.xml中获取数据
//添加medal,和first to solve,保存到re.xml中(这一步需要什么添加什么,不要选worldfinal,因为他的冠军是世界冠军hhh)

re.xml suf_team -> res.xml
//把打星队伍信息加到re.xml中,另存为res.xml中获取数据
//这样就实现了打星队伍不参与颁奖,但是可以滚榜

现在给出一个res.xml的例子,这是沈阳热身赛的真实数据,大家可以自己玩玩看。

http://pan.baidu.com/s/1kUMSJYJ
然后在命令行中输入resolver.bat res.xml --info就可。
(如果需要1/4屏幕显示,则在末尾添加 --display 2指令就好)

滚榜过程中,+-可以改变速度,q是退出,12是快退快进,空格键是下一个(但是不知道为什么正式赛的时候12不管用了。。。)

替换工具使用说明

 

 
 
复制代码
 1 #coding: utf-8
 2 import codecs
 3 def load_file(file_name):
 4     with codecs.open(file_name) as f:
 5         return f.readlines()
 6 
 7 def get_ans(file1, file2, file3):
 8     list1 = load_file(file1)
 9     list2 = load_file(file2)
10     list3 = load_file(file3)
11     ans = []
12     tot = 0
13     for x in list1:
14         tot += 1
15         if tot == 131:
16             #import pdb
17             #pdb.set_trace()
18             pass
19         for idx in xrange(len(list2)):
20             src = list2[idx][:-2]
21             desc = list3[idx][:-2]
22             x = x.replace(src, desc)
23         ans.append(x)
24     return ans
25 
26 def save_file(list_in, out='out.txt'):
27     with codecs.open(out, 'w') as f:
28             f.writelines(list_in)
29 
30 if __name__ == '__main__':
31     list_in = get_ans('a.txt', 'ma.txt', 'mb.txt')
32     save_file(list_in)
复制代码
该工具基于Python2.7开发,Python3无法使用 待替换文本放在a.txt,字典的key放在ma.txt,字典的value放在mb.txt,结果会输出在out.txt中 调用时不用加任何参数。 该工具开发者为NEU_QSC,感谢他的付出。这是他的博客传送门 鸣谢 感谢裁判组不辞辛劳的5h待命手动judge。 感谢周子群学弟认真通读英文guide给予宏观上的指导。 感谢其他NEU_ACMer,志协志愿者们,学校领导与老师,ICPC委员会的大力支持。 最重要的是感谢参赛选手们的包容与努力,你们的认可和成绩,是我们前进的动力,相信ACM系列比赛会因为诸位越来越好,谢谢。

查看原文:http://chilumanxi.org/2016/10/25/pc2%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Claude 2,您可以按照以下步骤进行操作: 1. 首先,打开Meet Claude的官方网址,以进行授权。您可以在https://www.anthropic.com/claude-in-slack 找到官方网址。 2. 授权后,您可以开始使用Claude 2。它是"claude-v1.2"的改进版本,具有在一般帮助、指令遵循、编码和其他任务方面的改进。此外,针对非英语语言,该模型也有相当好的表现。它还能够以一种更一致、更全面的方式进行角色扮演,并且默认情况下会编写更长、更彻底的回复。 3. 如果您之前已经体验过poe和slack的集成版,那么相比之下,Claude 2的响应速度要快得多。它具有更快的速度和更流畅的体验,为您提供更高效的交互。 通过按照以上步骤,您可以充分利用Claude 2,并享受更好的使用体验。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Meet Claude:免注册且免费的GPT使用指南](https://blog.csdn.net/weixin_44339690/article/details/130252039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ChatGPT 的平替 Claude 使用指南](https://blog.csdn.net/hero272285642/article/details/130002563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值