Codeforces Contest Helper v2:解决 CF 比赛需求

tiger2005

2021-09-03 17:35:53

Tech. & Eng.

啥是 Codeforces Contest Helper?

Github 地址 | 洛谷私题仓库 | Skype | QQ 群 = 458610798

Codeforces Contest Helper v2.0(CCHv2)是一个面向各大算法竞赛爱好者的 Codeforces 辅助软件。你可以在 这篇文章 中了解前置版本。这个软件目前完全开源,你可以对代码进行研究等用途,有什么可以改进的地方欢迎 Pull Request!

CCHv3 已经开始开发了!使用全新的 Electron + React + Material UI 框架搭建,让开发和用户体验更加丝滑。绝赞咕咕咕中

你可以通过 CCHv2:

介绍视频(2021/11/12 更新)

安装方式

你可以直接下载 Releases 中的压缩文件,在解压后直接运行 CodeForces Contest Helper v2 的可运行文件。由于这个软件正处于开发阶段,难免会遇到一些 bug,此时我在每次修改完后都会传上 dev 分支。所以接下来将会说一下如何用源代码进行下载安装。

  1. 前往 NW.js,选择符合自己系统的版本进行下载,随后解压。

  2. 前往 dev 分支或者洛谷私题仓库下载 CCHv2 的源代码,在电脑上解压。

  3. 如果你是 Windows 或者 Linux 用户,可以直接将源代码文件夹拖到第一步下载好的 nw.exe(nw) 中运行。或者,你可以在命令行中输入 nw.exe Codeforces_Contest_Helper_v2所在文件夹 运行。

  4. 如果你是 MacOS 用户,可以将 nwjs 文件放在源代码所在目录中,右键 index.html,选择用其他方式打开,在其中选择 nwjs 并且忽略警告。

在成功运行后,你可以将 CCHv2 固定在任务栏,方便下次打开。如果你使用的是本地编译源代码的方式,在每次小 bug 更新的时候,你也可以很方便的进行更新,只需要把 CCHv2 文件夹的内容替换即可。

如果你启动失败了,记得去任务管理器结束 nwjs 进程!

使用方法

个人界面

⚠ 这个功能依赖 API,所以在 Codeforces 关停 API 的时候将会无法使用。

⚠ 这个功能中的“通知获取”和“提交记录查看”依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

接下来我们将会详细列出个人界面的功能。

个人界面主要的功能是比赛中一位参赛者的信息获取。有两种分类方式——参赛者模式和虚拟赛模式。前者将会获取需要 Register 的那一次(是不是 rated 并无所谓),后者则是获取特定的虚拟赛的信息。

在输入的信息中,两者共有的为用户名和比赛 ID。前者就是你的 Codeforces 名字,如果你正身处于一个团队当中的话,输入你的名字也可以直接获取到你所在团队的战绩。在登陆完成后,这个框允许留空,此时将会替换成当前登陆的用户。比赛的 ID 有两种查看方式,一种是在 URL 中出现的数字(比如 https://codeforces.com/contest/1234 的比赛 ID 就是 1234),另一种是使用 CCHv2 的比赛界面进行查询。

在虚拟赛中还需要输入比赛开始的时间,让 CCHv2 可以知道你想要获取的是那一场虚拟赛。如果你只想获取最近的一次比赛的话,在至少提交一次之后,就可以直接输入 auto 进行获取。CCHv2 不会帮你新建虚拟赛,请自行前往官网新建。虚拟赛在初始化的过程中会提前获取排行榜和 hack 信息,所以请提前 5 分钟开始获取

在检测信息成功后,如果比赛还没有开始,将会进入等待界面。如果你在设置中选择了“在比赛未结束时打开 Problems 界面”的话,此时就会有一个题目查看器弹出,你可以提前进行分屏。同时,如果你没有 Register,也会在页面中进行提示,并且提供快速注册按钮。

在这个界面中,你需要长按左下角回到主页面。点击右下角可以显示小窗口,小窗口将会被置顶,方便放在电脑的小角落。

在等待完毕之后,CCHv2 将会加载必要信息,随后显示主页面。

在这个界面中,上方将会显示你的个人信息和比赛信息。在比赛名字下为比赛的进度条,当比赛正在进行的时候你可以从这里查看比赛的大致进程以及你的提交情况。Rating 变化量在 Codeforces 没有公开的时候将会调用 CF-Predictor 进行获取,也就是比赛的时候自动刷新 Rating 变化量。

左下角为你的排名以及排名曲线。在比赛过程中,曲线将会由每次获取得出的排名进行连接;在比赛结束后,如果获取了排行榜,或者点击上方的“强制获取排行榜”,在获取完成后将会由预测器进行排名的计算。可以点击展开按钮进行进一步的查看,包括用鼠标选择查看的排名区间。同时,你可以在左下角进行获取形式的切换,包含 Rated 和 Unrated 两种,主要是为了区分 Unofficial 用户。

右下角为题目状态。总共有三种方式进行展示——方格模式、列表模式和事件模式。图中展示的是列表模式,方格模式适合在题目比较多的时候使用,方便查,事件模式记录的是在这一次比赛中的每一次提交。如果加载了排行榜,将会在列表模式中显示通过人数和尝试人数占总人数的比例,显示在每道题的下方,如上图。

在比赛过程中,如果你打开了 Problems 界面,将会实时刷新通知和 hack 信息,然后在 Problems 界面进行提醒。

你可以打开小窗口。这个窗口将会把重要的内容提取出来进行显示,包括当前排名,rating 变化,进度条和过题情况。

点击一个提交记录的方块可以查看提交记录。提交记录页面将会在下面具体讲述。

榜单界面

⚠ 这个功能依赖 API,所以在 Codeforces 关停 API 的时候将会无法使用。

⚠ 这个功能的“好友”部分需要你进行 API Key 的配置。请前往 Codeforces 网址,在个人的设置界面中找到 API,随后进入并且创建一对新的 API Key,然后填写到设置界面中开启。

榜单界面可以获取比赛的排行榜。在下方选择查看的方式,输入比赛 ID 和相关信息后点击发送,即可查看。

查看方式有三类:所有,好友和房间。在“所有”类型中,可以在右下方填写用户名进行用户查询(如果想要看团队只需要填写团队内任意一人即可),若留空就是全榜。在“好友”类型中,在选中好友方式后,点击一次红色按钮就可以重新加载好友列表。在“房间”类型中,你需要输入查询的房间号码。这个号码可以在主站的 URL 中获取,但是如果你使用的是 CCHv2 的话,可以在个人界面的标签处看到自己所在的房间号。

在信息栏上方的设置栏中,左边为每一页显示的条目数量以及 show unofficial 的设置;中间是页码设置,你可以左右翻页,或者点击页码后输入你想要跳转到的页码,然后点击其他地方或者按下回车就可以刷新;右边是状态显示,在出现了类似于比赛 ID 错误、用户填写错误等问题将会在这里显示。

另外,如果你查看的是 CF 赛制的比赛,将鼠标放在分数上可以看到每个人的错误次数。

你可以点击分数框或者用户框,查看这个人(在这道题)上的所有提交记录。接着点击提交结果,如果拥有权限的话可以查看代码。

点击用户名称会打开介绍页面。其中,你可以点击“个人信息”在简介页面打开其用户信息,也可以点击“追踪状态”跳转到个人界面查看这场比赛中这个用户的表现。

比赛界面

⚠ 这个功能依赖 API,所以在 Codeforces 关停 API 的时候将会无法使用。

⚠ 这个功能中的“获取通过题目数量”依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

比赛界面主要是为了方便进行比赛的查看等操作。

在第一次进入页面的时候,CCHv2 将会获取所有比赛的列表,并且在你登陆的时候获取你的已通过题目方便进行筛选(由于 Codeforces 的 API 限制,只能获取通过了至少一道题的信息,我们将会在之后尝试进行优化)。在加载完一次之后,可以点击左下角重新加载比赛列表。翻页等功能在此不再赘述。

上方为搜索框和排序选项。搜索的规则将会放在最后讲述。排序选项中左边两个代表按照时间 / 通过题目数量进行排序,而右边两个代表排序方向。

在显示的比赛框中,你可以获取到比赛的 ID、比赛类型和通过标题进行猜测的比赛 Div.。对于还没有结束的比赛,还会显示倒计时。你可以在此搜索到比赛 ID,随后在个人界面和榜单界面使用。

对于已经结束的比赛,你可以点击右侧的“虚拟赛”按钮,输入时间后快速创建虚拟赛。创建成功后,将会自动跳转到个人界面并且打开虚拟赛。

接下来介绍搜索规则。输入的字符串将会以空白字符进行划分,然后依次判断。如果该串符合搜索标签,那么按照搜索标签进行限制,否则对比赛名字进行全字匹配找到名字包含该字符串的比赛。

定义 Number 类限制和 String 类限制,其中前者可以使用比较运算符(=,!=,>,<,>=,<=),后者只能使用 = 运算符,大小写不敏感。
使用方式举例:
":id=1234"             比赛 ID 为 1234
":type=CF :time>=2021" 为 CF 赛制并且在 2021 年后举办
":ac>=5 :pcnt>=8"      通过了至少 5 题且总共有至少 8 题
-------------------------------------------------------------------------------------------------------
:id   [Number] 比赛的 ID
:type [String] 比赛的类型。可选择:"CF", "ICPC", "IOI"
:mode [String] 比赛 Div.。可选择:"Div1", "Div2", "Div3", "Div4", "Div1+2", "RDiv2"(Rated for Div. 2)
:time [Number] 比赛时间。比较的具体方式如下:
               1. 将当前比赛的开始时间量化为 yyyyMMddhhmm 形式,如 2021/4/1 22:35 就会变成 "202104012235"。
               2. 和查询字符串进行长度比较,将比赛开始时间的长度通过删除末尾元素或追加 0 使得和查询字符串长度一致。
               3. 进行字典序比较。
               在这种形式下,你可以使用 ":time=202104" 获取 2021 年 4 月份的所有比赛,使用 ":time>2020" 获取 2021 年至今的所有比赛。
:ac   [Number] 通过题目数量(如果无法获取则为 0)
:pcnt [Number] 总题目数量(如果无法获取则为 0)

题目界面

⚠ 这个功能依赖 API,所以在 Codeforces 关停 API 的时候将会无法使用。

⚠ 这个功能中的“提交记录查看”依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

题目界面,是一个专门为题目分析打造的一个界面。在这里,你可以通过搜索限制快速找到自己需要的题目。

页面顶部为标签选择栏。你可以点击其中的一些标签以选中 / 取消选中,题目将会被限制在完全包含选中标签的题目内。

中间为 rating 柱状图。在每一次更新搜索状态后,图表将会自动刷新。你可以点击柱状图中的元素选中一个 rating 下的题目。搜索规则会填写在下方的难度限制中。

中下方为题目列表。在此你可以看到每道题目的通过情况、通过人数以及标签的信息。你可以点击每道题左边的标签打开提交记录列表,由此进入提交记录页面。提交记录页面将会在下面具体讲述。点击题目名称可以利用题目窗口打开这道题目。点击此处的标签同样可以进行标签筛选。

下方为信息栏。左边为两个状态信息,分别为题目列表和个人提交记录信息。你可以点击以刷新,比如说你在打开题目界面但是没有被检测到登录的时候。难度限制不多介绍。搜索框中可以填写信息进行搜索。其中支持的搜索规则将会列举在下方。然后为翻页操作。之后的“标签????”和“星星⭐”按钮分别表示是否显示标签和 rating。随后的按钮表示排序选项。其中前四个按钮分别表示按照题目 ID、题目 rating、名字字典序以及通过人数排序,最后一个按钮用来控制方向。

接下来介绍搜索规则。输入的字符串将会以空白字符进行划分,然后依次判断。如果该串符合搜索标签,那么按照搜索标签进行限制,否则对题目名字进行全字匹配找到名字包含该字符串的题目。

定义 Number 类限制和 String 类限制,其中前者可以使用比较运算符(=,!=,>,<,>=,<=),后者只能使用 = 运算符,大小写不敏感。
如果限制处写着 ------ ,表明这是一个无参数限制(也就是后面不需要加比较符号以及比较者)
使用方式举例:
":cid=1234"             比赛 ID 为 1234
":cid=1234 :index=A"    比赛 ID 为 1234 且题目下标为 A 的题目,等同于 :pid=1234A
":ac :random"           在通过了的题目中随机选择
-------------------------------------------------------------------------------------------------------
:cid   [String] 比赛的 ID。
:index [String] 题目的下标(例如:A, B, A1, 01)。支持模糊匹配,具体为输入 A 可以匹配 A、A1、A2 等。
:pid   [String] 题目 ID(例如:4A; 1234D)。支持模糊匹配,具体为输入 A 可以匹配 A、A1、A2 等。
:ac    [------] 已经通过的题目。
:uac   [------] 没有通过的题目。
:unf   [------] 还没有提交的题目。

同时,支持 :random 标签,在输入完成后会在满足限制的题目中随机抽取一道。

简介界面

⚠ 这个功能依赖 API,所以在 Codeforces 关停 API 的时候将会无法使用。

⚠ 这个功能中的“提交记录查看”依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

简介界面致力于打造一个让用户更加舒适的观感体验。在此处,将会列举出一个用户的基本信息、rating 变化、练习情况和提交记录。

此界面分为三个子页面。一开始展示的便是主页面。你可以点击“更换用户”进行用户更换,可以留空,表示获取自己的信息。

主页面中,上方展示的是用户的基本信息,包括当前 rating、贡献分、好友等基础信息。随后显示的是 rating 变化曲线。你可以点击其中的点以传送到个人界面并且打开这场比赛的信息。随后是提交信息,其中包括提交总数、通过题目,以及两个模式下的 PP 值。PP 值的计算方式将会在最下方放出。

下面的操作栏中,“题目统计”和“提交记录”分别导向剩下的两个子页面。右下角的三个指示灯分别表示个人信息、rating 图表和提交记录的加载情况,其中包括当前加载完毕的内容量。

点击“题目统计”可以进入题目统计页面。这个页面和题目界面功能类似,但是在搜索功能中有一些调整。

上方多出了一个条状图,表示的是该用户每一种题目做过的题目数量的大致情况,颜色对应标签颜色。

其余的特性在题目界面的介绍中已经提及,在此不多介绍。

点击“提交记录”打开提交记录界面。在此处你可以看一个提交频率图。你可以点击上方的年份切换显示的信息。同时,你可以在图中进行拖动,选中一个区域后将会把搜索限制覆盖为选中区域内的提交记录。

中间部分为提交记录信息。点击题目名称可以在题目窗口中打开题目。点击每条记录右边的记录信息跳转到提交记录页面。提交记录页面将会在下面具体讲述。后面表示的是测试数据类型。如果这个提交记录结果并非通过,那么将会显示第一个错误的测试点编号。常见的测试数据类型为 MAINPRETSAMP ,分别表示主测试、Pretest 和样例。

下方为状态栏。搜索框仍然拥有特定的搜索方式,将会在下面详细讲述。在切换页面按钮后,只有一个按钮——选择是否显示练习的提交(不是在比赛的时候的提交)。

关于 PP 计算方式:

目前来说沿用 osu! 的 pp (potential point) 的计算方式并进行优化。

首先选取所有通过的题目,在比赛 PP 中需要去除赛后通过的题目。

然后取出所有题目的 rating,并且按照降序排序,取出前 100 个,如果不够则补 0。

假设得到了数组 a_{0..99},那么:pp=\dfrac{\sum_{i=0}^{99}(a_i \times 0.95^i)}{\sum_{i=0}^{99}0.95^i}。简单来说,更难的题目拥有更大的比重。

利用这个数据可以大致评判这个用户的水平。如果比赛 PP 过低,说明并没有参加过很多高难度比赛;如果比赛 PP 和练习 PP 相差甚远,说明这个用户主要为赛后刷题。

接下来介绍提交记录的搜索规则。输入的字符串将会以空白字符进行划分,然后依次判断。如果该串符合搜索标签,那么按照搜索标签进行限制,否则对题目名字进行全字匹配找到名字包含该字符串的提交记录。

定义 Number 类限制和 String 类限制,其中前者可以使用比较运算符(=,!=,>,<,>=,<=),后者只能使用 = 运算符,大小写不敏感。
如果限制处写着 ------ ,表明这是一个无参数限制(也就是后面不需要加比较符号以及比较者)
使用方式举例:
":cid=1234"            比赛 ID 为 1234
":cid=1234 :index=A"   比赛 ID 为 1234 且题目下标为 A 的题目,等同于 :pid=1234A
":time>=2021 :ac"      在 2021 年后的所有 AC 记录
":incontest :uac"      在比赛过程中没有通过的提交记录
-------------------------------------------------------------------------------------------------------
:cid        [String] 比赛的 ID。
:index      [String] 题目的下标(例如:A, B, A1, 01)。支持模糊匹配,具体为输入 A 可以匹配 A、A1、A2 等。
:pid        [String] 题目 ID(例如:4A; 1234D)。支持模糊匹配,具体为输入 A 可以匹配 A、A1、A2 等。
:time       [Number] 提交时间。比较的具体方式如下:
               1. 将当前提交的开始时间量化为 yyyyMMddhhmm 形式,如 2021/4/1 22:35 就会变成 "202104012235"。
               2. 和查询字符串进行长度比较,将比赛开始时间的长度通过删除末尾元素或追加 0 使得和查询字符串长度一致。
               3. 进行字典序比较。
               在这种形式下,你可以使用 ":time=202104" 获取 2021 年 4 月份的所有提交记录,使用 ":time>2020" 获取 2021 年至今的所有提交记录。
:incontest  [------] 在比赛过程中的提交记录。
:practice   [------] 比赛后的提交记录。
:ac         [------] 已通过的提交记录。
:uac        [------] 未通过的提交记录。
:contest    [------] 正常比赛的提交记录。
:gym        [------] 训练场的提交记录。
:verdict    [String] 提交结果。除了 `Accepted` 定义为 `AC` 外,其他的大多数都会被定义为首字母的拼接。具体定义在下方。

function toSmallInfo(x){
    // in case it's still testing
    if (x == undefined || x == "") return "INQ";
    if (x == "OK") return "AC";
    if (x == "FAILED") return "FAIL";
    if (x == "PARTIAL") return "PRT";
    if (x == "COMPILATION_ERROR") return "CE";
    if (x == "RUNTIME_ERROR") return "RE";
    if (x == "WRONG_ANSWER") return "WA";
    if (x == "PRESENTATION_ERROR") return "PE";
    if (x == "TIME_LIMIT_EXCEEDED") return "TLE";
    if (x == "MEMORY_LIMIT_EXCEEDED") return "MLE";
    if (x == "IDLENESS_LIMIT_EXCEEDED") return "ILE";
    if (x == "SECURITY_VIOLATED") return "SV";
    if (x == "CRASHED") return "CRS";
    if (x == "INPUT_PREPARATION_CRASHED") return "IPC";
    if (x == "CHALLENGED") return "CHL";
    if (x == "SKIPPED") return "SKP";
    if (x == "TESTING") return "TST";
    if (x == "REJECTED") return "REJ";
    return "ERR";
}

题目窗口

???? 这个功能不依赖 API,所以在 Codeforces 关停 API 的时候也不会炸!

⚠ 这个功能依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

题目窗口可以说是 CCHv2 的一个亮点。你可以通过三个方式打开这个窗口:

点击左侧的加号可以进行题目的添加。题目 ID 为比赛 ID + 题目下标,比如 "1234A" 之类。添加比赛则只需要输入比赛 ID。目前题目界面兼容了 Contest 和 Gym,暂时不支持 acmsguru。

在添加后,题目将会以单个元素进行显示,而比赛将会把所有题目放在一个“文件夹”类的可折叠元素中,在打开多场比赛的时候就可以把不重要的比赛进行折叠。

在题目窗口中,我们对默认的 CSS 进行了适当的微调,并且加入了 KaTeX 复制插件,防止复制的时候出现乱码。你也可以点击每个模块的“复制信息”按钮把大体内容复制,然后就可以放在翻译软件了。

左下角的两个按钮是为了和你的代码编辑器进行互动的,操作方式我们将会放在下一个篇目中。右下角为提交按钮和刷新按钮。前者只有在登录之后才会出现,在点击后就可以选择语言,粘贴代码,点击提交按钮即可提交。

在提交之后,CCHv2 将会自动刷新当前的提交状态,在评测结果出来的时候,如果在设置中开启了提醒功能,你也可以收到来自 CCHv2 的通知。

你可以通过这个视频了解 CCH 爬取题目和浏览器加载题目在速度上的区别。

部分编辑器的兼容支持

在前面的题目界面中,我们提到了题目界面可以和你的代码编辑器互动。我们在此着重讲讲如何实现。

在题目界面的左下角,有两个按钮,分别对应着 传输当前打开的这道题目 以及 传输所有已加载的题目。在获取一次比赛的题目后,你可以在看题的时候边看边点,也可以一次性把所有题目都传输到编辑器。在安装适当插件后,代码编辑器就会识别传入的数据,并且提供测试方案。

需要注意的是,CCHv2 的信息传输方式和 Competitive Compaion 基本一致。Competitive Compaion 是一个浏览器插件,可以在一道题下通过简单的点击将题目传输到代码编辑器中。在运作过程中,Competitive Compaion 需要一个端口进行数据发送,这对应着 CCHv2 设置中的交流端口。也就是说,在接下来我提到端口的时候,请务必记住将这个端口加到设置界面中去。

目前来说,直接支持这个插件的编辑器中最流行的便是 CP Editor。在下载之后,只需要前往设置界面打开 Competitive Companion 插件,就可以直接传输数据,无需配置。因为 CP Editor 的端口为默认端口,所以你不需要对设置进行更改。 CP Editor 在获取完毕后会打开一个新的标签页,其中自动填入了这道题目的数据。

VS Code 需要安装插件才可以支持此功能。你需要前往这里下载插件 Competitive Programming Helper (cph)。下载之后,打开 VS Code,新建一个文件夹并且拖到 VS Code 让它打开,然后就可以准备传输数据了。在此之前,建议先前往插件的扩展设置(在扩展页面进入这个插件的介绍页,就可以找到设置齿轮了),在里面提前设置好默认语言和模板代码。

在配置完成后,传入数据时,VS Code 就会在文件夹下新建一个文件代表这道题目的代码,样例同样是自动加载。

Sublime Text 中也有类似的插件,叫做 CppFastOlympicCoding。你可以在 Package Control 中下载这个插件。但是这个插件本身没有接收传入数据的功能,所以我将网上一位大佬的代码经过修改后,写了一个适配 Sublime Text 的数据接收插件。这个插件需要使用 12345 作为端口,所以请务必记得加入到设置中

目前这个插件储存在洛谷题目仓库中,前往附件即可下载。题目描述中放置的就是专门为 C++ 选手准备的配置方案,在这里也放出来。

请确保你安装了 Package Control 并且配置好了 g++。

  1. 利用 Package Control 安装 CppFastOlympicCoding。按 Ctrl+Shift+P,输入 FastOlympicCoding 后找到 Open Settings,打开后在右方输入:
{ 
  "lint_enabled": false, 
  "close_sidebar": false, 
  "tests_file_suffix": "__tests" // 非 Windows 请删除
}
  1. 安装 sublimelinter 和 sublimelinter-gcc,然后输入 sublimelinter settings,打开后在右边加入以下内容,然后调整 gcc / g++ 版本。
{
    "linters":
    {
        "gcc": {
            "disable": false,
            "executable": ["gcc"],
            "args": ["-fsyntax-only", "-std=c90"],
            "I": [
                "${file_path}/include",
                "${folder}/include",
                "/usr/local/include",
            ],
            "excludes": [],
        },
        "g++": {
            "disable": false,
            "executable": ["g++"],
            "args": ["-fsyntax-only", "-std=c++11"],
            "I": [
                "${file_path}/include",
                "${folder}/include",
                "/usr/local/include",
            ],
            "excludes": [],
        },
    },
}
  1. 下载附加的 FastOlympicCodingHook.zip,然后在 Sublime Text 的菜单栏中选择首选项 -> 浏览插件目录,然后新建一个文件夹 FastOlympicCodingHook ,把刚刚的内容解压放进去(注意不要包含子文件夹)。在打开文件夹中的设置文件 FastOlympicCodingHook.sublime-settings 进行配置后就可以开始用了。

    ⚠ 模板位置和文件夹位置需要满足不包含空格等空白字符,并且放在系统盘,否则插件无法读取。

  2. 你可以使用一些可替换参数。以下为使用例:

/*******************************
| Author:  tiger2005
| Problem: %$Problem$%
| Contest: %$Contest$%
| URL:     %$URL$%
| When:    %$Time$%
| 
| Memory:  %$MemoryL$% MB
| Time:    %$TimeL$% ms
*******************************/

在安装完插件后,传输题目,你应当可以看到一个新的文件被打开。在写完代码后,可以参考FastOlympicCoding 仓库中的介绍,使用快捷键进行测试等操作,比如说 Ctrl+Alt+B(MacOS 为 Ctrl+B)进行测试,Ctrl+K Ctrl+P 展开或者收起右侧栏等等,此处不再赘述。

在配置之后,你就可以很轻松的把题目数据传输到自己喜欢的编辑器,然后完成你的代码了。

模块

模块界面将会陈列未来将会加入的一些增益模块。目前只有 启动题目窗口 的功能所以不多做介绍。

提交记录界面

⚠ 这个功能中依赖网页爬取,所以在 Codeforces 炸了的时候将会无法使用,在开启了重定向后需要去设置界面进行重定向验证。

提交记录界面主要展示一次提交记录的所有信息。

顶侧为主要信息,包括提交人、题目、评测结果、使用语言已经时空用量等。你可以点击评测结果旁边的按钮跳转到浏览器查看提交记录。

右下方的“显示数据”可以方便你快速查看记录中数据的具体情况。在进入后,程序将会首先获取数据信息,随后你可以点击查看每个数据,或者所有数据一起查看。数据的表头都是具有粘性的,将会贴在页面上端,方便进行快速查找。

后记

这个软件可能会有大大小小的 bug,而且在一次大型优化前的所有测试中都需要等待 2 到 5 分钟获取题目信息经测试,在 Div.2 刚刚开始的时间内也可以在 15 秒内加载出题面,所以但是还是建议在这个软件可以完全替代 Codeforces 比赛界面之前好好开浏览器吧。

如果发现了 bug,可以在 QQ 群和 Skype 进行提问,我会用最快的速度回复并且修复。也可以去 Github 来个 issue,我会光速前往解决。

最后,希望大家用的开心,CF Rating ↑↑!