ICPC"/>
ICPC
0.引言:
上周突然临危受命,学校ACM社团要举办校内迎新赛,想要使用滚榜功能让揭晓结果变得更加刺激。奈何本人不打ACM,一开始连滚榜都不知道(苦笑.jpg),不过还是跌跌撞撞把功能实现了,介于网络上这方面的教程实在是凤毛麟角,我就把自己的经验和心得留给以后有需要的同学。
1.官网下载压缩包
首先来到官网下载resolver的压缩包
ICPC Tools
解压下来的目录结构
友情提示:可以先看READMD.pdf
,官方文档比网上的教程更加全面和细致。
举个栗子,其中较为重要的有
命令行实例
- 这是从CDS服务器拉取的比赛信息
resolver.bat https://169.254.80.194:8443 admin adm1n --presenter --fast 0.7--rowDisplayOffset 4 --info
- 这是从本地文件来获取比赛信息
resolver.bat c:\events.json --singleStep 999
键盘快捷键
- Ctrl + q 停止
- space or f 下一步
- r 上一步
- +/= 加速
- -/_ 减速
- ….
1.5.解决中文乱码的问题
来到lib下的presentation.jar,可以看到我们的字体是Helvetica-Plain.ttf
来到Win10字体文件夹:C:\Windows\Fonts
将一款中文字体添加到presentation.jar的font目录重命名为Helvetica-Plain.ttf
就可以了
2.构建xml文件
由于我们选择的方式是从本地文件来加载比赛信息,那么我们就需要按照规定的格式和规范来构建xml文件
这里推荐一下网络上的教程
滚榜程序Resolver源码阅读
icpc-tools resolver 滚榜工具使用指北
就我在实际过程中总结一下
xml文件必须的内容,可以分为以下几个部分:
- 比赛基本信息(比赛名称,持续时间之类的, info项)
- 比赛区域信息(队伍所属大洲,如亚洲等,我在实际使用的时候以学院作为区域喂的数据, region项)
- 判题结果信息(根据OJ的实际情况来,主要是设置各种判题结果怎么处理,比如说CE算不算罚时,每次错误提交算多少罚时之类的,judgement项)
- 代码语言信息(随便加一加就好了,实际滚榜并不会用到,但是你需要保证你OJ的提交中的语言都在这里包含了,否则会报错, language项)
- 队伍信息(选手信息, team项)
- 题目信息(problem项)
- 结果信息(对应所有的提交,按格式生成对应的结果信息,run项)
- 增加比赛结束标志(finalized项)
<contest><info>...</info><region>...</region><judgement>...</judgement><language>...</language><problem>...</problem><team>...</team><run>...</run><finalized>...</finalized>
</contest>
1.info
info标签里面记录比赛的有关信息,包括比赛的编号、标题、罚时、开始时间戳、比赛总时长、封榜时间…
info, fianlized标签只能有一个,其他标签可以有多个
<info><length>4:00:00</length> <penalty>20</penalty> <started>False</started> <starttime>1512824400.0</starttime><title>2017 USTB ACM-ICPC Final Contest</title><short-title>2017 USTB ACM-ICPC Final Contest</short-title><scoreboard-freeze-length>0:30:00</scoreboard-freeze-length><contest-id>default--3</contest-id>
</info>
2.region
region记录比赛选手的区域的相关消息,包括区域编号,名称
<region><external-id>1</external-id><name>School of Computer and Communication Engineering</name>
</region>
<region><external-id>2</external-id><name>School of Automation and Electrical Engineering</name>
</region>
3.judgement
作用是为了配合run
项使用,设置不同的结果以及对应的类型,比如可以设置CE不算罚时之类的,注意这里需要能和你自己OJ的提交信息完全匹配上
,或者你也可以只设置AC和WA两种状态,然后导出提交的时候处理一下映射。
<judgement><id>1</id><acronym>AC</acronym><name>Yes</name><solved>true</solved><penalty>false</penalty>
</judgement>
<judgement><id>2</id><acronym>WA</acronym><name>No - Wrong Answer</name><solved>false</solved><penalty>true</penalty>
</judgement>
<judgement><id>3</id><acronym>CE</acronym><name>No - Compile Error</name><solved>false</solved><penalty>false</penalty>
</judgement>
4.language
和judgement
一样,主要是为了配合run
使用。
<language><id>1</id><name>C</name>
</language>
<language><id>2</id><name>C++</name>
</language>
<language><id>3</id><name>Java</name>
</language>
5.team
记录选手的相关信息,包括区域ID,team编号,名称
这里注意external-id一定要跟上面的region的external-id匹配上
<team><id>87</id><external-id>87</external-id><region>School of Computer and Communication Engineering</region><name>Yuncheng Wang</name><university>Yuncheng Wang</university>
</team>
<team><id>108</id><external-id>108</external-id><region>School of Computer and Communication Engineering</region><name>Jinkai Xue</name><university>Jinkai Xue</university>
</team>
6.problem
注意注意:这里的ID一定要是
从1开始递增
(踩过的坑
<problem><id>1</id><letter>A</letter><name>Stones</name>
</problem>
<problem><id>2</id><letter>B</letter><name>Practice of SUOAO</name>
</problem>
7.run
run标签记录的就是所有选手的提交情况,对应提交的选手编号、对应题号、编程语言、结果、提交时间、比赛开始到提交经过的时间
、是否解决、罚时…
judged
需要全部为True,status
需要全部为done,time
是比赛开始到提交经过的时间,其他的选项必须严格的匹配前面的标签,例如language、problem、team、result等
<run><id>6</id><judged>True</judged><language>C++</language><problem>2</problem><status>done</status><team>69</team><time>471.309999</time><timestamp>1512824871.31</timestamp><solved>false</solved><penalty>true</penalty><result>WA</result>
</run>
<run><id>7</id><judged>True</judged><language>C</language><problem>4</problem><status>done</status><team>99</team><time>494.562765</time><timestamp>1512824894.56</timestamp><solved>false</solved><penalty>true</penalty><result>WA</result>
</run>
8.finalized
time
直接设为0即可
timestamp
是比赛结束时间的时间戳
last_gold,last_silver,last_bronze
这三个指的是金牌、银牌、铜牌的最后一名是多少,比如sample中就代表金牌一个,银牌三个,铜牌五个
实际上设置的金银牌数量并没有生效,不过后面我们可以个性化设置
<finalized><last_gold>1</last_gold><last_silver>4</last_silver><last_bronze>9</last_bronze><time>0</time><timestamp>1512838800.0</timestamp>
</finalized>
3.生成contest.json文件
在resolver根目录双击运行awards.bat
很明显这里就有我在上面介绍过的从远程cds加载还是从本地文件加载
我们选择从本机文件加载
运行后的结果如下:
右上方Add Awards
,我们就可以自行添加awards的种类、数量等
以奖牌为例,这里奖牌的个数上限为10,怎么自行修改
回到主页面选中,这里就可以为选手添加指定的award和备注(在滚榜程序中会以它展示)以及该奖项的展示方式
或者自定义奖项
完成一系列配置就可以save
生成json文件了
4.运行resolver.bat
最后一步就是来到resolver根目录运行
resolver.bat 你的json文件位置
大功告成!按照上面的键盘快捷键操作就可以了
更多推荐
ICPC
发布评论