ICPC

编程入门 行业动态 更新时间:2024-10-27 08:38:46

<a href=https://www.elefans.com/category/jswz/34/1760825.html style=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

键盘快捷键

  1. Ctrl + q 停止
  2. space or f 下一步
  3. r 上一步
  4. +/= 加速
  5. -/_ 减速
  6. ….

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文件必须的内容,可以分为以下几个部分:

  1. 比赛基本信息(比赛名称,持续时间之类的, info项)
  2. 比赛区域信息(队伍所属大洲,如亚洲等,我在实际使用的时候以学院作为区域喂的数据, region项)
  3. 判题结果信息(根据OJ的实际情况来,主要是设置各种判题结果怎么处理,比如说CE算不算罚时,每次错误提交算多少罚时之类的,judgement项)
  4. 代码语言信息(随便加一加就好了,实际滚榜并不会用到,但是你需要保证你OJ的提交中的语言都在这里包含了,否则会报错, language项)
  5. 队伍信息(选手信息, team项)
  6. 题目信息(problem项)
  7. 结果信息(对应所有的提交,按格式生成对应的结果信息,run项)
  8. 增加比赛结束标志(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

本文发布于:2023-06-17 04:18:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/753647.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ICPC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!