1.polygon介绍
网站:https://polygon.codeforces.com/
Polygon 是一个支持多人协作的出题平台,功能非常完善。官网描述为Polygon 的使命是为创建编程竞赛题目提供平台。
在 Codeforces (CF) 出题必须使用 Polygon。在其它地方出题,尤其是多人合作出题时,使用 Polygon 也是不错的选择。
2.创建题目
进入polygon首页,点击"New Problem"。
进入创建题目界面,自定义题目的名称,要求只能使用小写的单词,用破折号分隔。
随后进入题目列表点"start"进入题目编辑。
3.题目信息维护
3.1 题目基础信息维护
上方可以对题目的基础信息进行维护,包括输入输出文件、时间限制、空间限制、交互题。
| 选项 | 含义 |
|---|---|
| Input file: | 输入文件名或输入"stdin"以使用标准输入 |
| Output file: | 输出文件名或"stdout"表示标准输出 |
| Time limit: | 每测试点的时间限制(限制250毫秒到15000毫秒之间) |
| Memory limit: | 内存限制(限制4 MB 和 1024 MB 之间) |
| Interactive: | 是否是交互题 |
下方"Tags" 可用来维护题目的知识点,但需要使用英文。polygon出题一定需要配置知识点。
3.2 配置题面(中文)
首先进入"Files"选项内,替换"olymp.sty"、"problem.tex"和"statements.ftl"的源码为支持中文的,源码可见项目:https://github.com/LMTINSUZHOU/polygon-chinese-latex-file
点击文件的"Edit"编辑文件:
替换完成后点击"Save"保存,注意保存需要等待左下角出现绿色的"File problem.tex has been saved"出现才能返回。
随后进入"statement"选项,"Language"选择"Chinese"并点击"Create"。
随后进入如下页面即可编辑题目:
| 选项 | 含义 |
|---|---|
| Name: | 题目名称 |
| Legend: | 题面 |
| Input format: | 输入说明 |
| Output format: | 输出说明 |
| Notes: | 提示 |
书写时须使用latex语法,可参考polygon的官方手册或第三方手册,注意Polygon的样例不在此处输入,而是取测试点的处设置的样例。如需插入图片可在下方"Statement Resource Files"中上传,并调用。
编辑完成后可以点击右上角的"In HTML"或"In PDF"查看,建议查看"In PDF"以保证无误。
4.Checker的配置
checker是用来判断题面是否通过的检查器,使用testlib.h编写。
编写可以参考CF官方说明、oi-wiki、cnblog、luogu等,其有被称为spj程序。
自定义checker可以点击"New file"并输入checker.cpp作为检查器源文件名称(可以自定义但是这样写清楚)随后点击"Create file"来粘贴你的checker并保存。
自定义checker需要给checker准备测试样例,检查checker的准确性。在"Checker tests"中点击"Add Test"添加,随后点击"Run tests"运行检查。
这些是polygon自带的checker,可以满足一般的需求。
| 文件名 | 说明 |
|---|---|
| fcmp.cpp | 按行比较,不忽略空白字符 |
| hcmp.cpp | 单个超大整数 |
| lcmp.cpp | 按行比较,忽略空白字符 |
| ncmp.cpp | 一个或多个 int64,忽略空白字符 |
| nyesno.cpp | 零个或多个 yes/no,大小写不敏感 |
| rcmp4.cpp | 一个或多个 double,最大允许误差 1E-4 |
| rcmp6.cpp | 一个或多个 double,最大允许误差 1E-6 |
| rcmp9.cpp | 一个或多个 double,最大允许误差 1E-9 |
| wcmp.cpp | token 序列比较 |
| yesno.cpp | 单个 yes 或 no,大小写不敏感 |
5.Validator校验器的配置
Validator 用于检验造好的数据的合法性。当造好一道题的数据,又担心数据不合法时,出题者通常会借助 validator 来检查。
文件上传可以参考checker.cpp的文件创建。
自定义Validator需要给Validator准备测试样例,检查Validator的准确性。在"Validatortests"中点击"Add Test"添加,随后点击"Run tests"运行检查。
6.测试点的配置
polygon的样例输入是可以自己配置的,但是答案是有标程生成的。
配置样例我们首先需要点击"Solution files",点击"Add file"上传标程或者"New file"创建文件。
随后点击"Tests"进入测试点的配置。
首先,我们可以点击"Add Test"添加自己书写的测试点,注意测试点需要满足输入检查的要求。其中"Use in statements"配置可以将测试点配置为样例。
除了这个方式我们还可以以使用数据生成器,教程可以参考[Polygon:从入门到入门](https://www.cnblogs.com/frostyice/p/19215603#generator)、luogu等。
如果需要使用数据生成器,需要在"Files"选项中的"Source Files"中上传"gen.cpp"。
随后按照polygon的要求书写生成脚本,点击"Save Script"即可保存并生成测试点,点击"Preview"可以查看输出。
7.打包
随后确保右上方的栏目内无黄色异常可前往"Packges"选项创建包。
在此之前,前往右下角点击"Commit Changes"上传修改。完成后可以回到"Packges"点击"Full"生成所有的数据包。系统会自动校验并使用你书写的cheker、validator、Test脚本来生成数据。
随后会生成三个包,Standard包中仅包含脚本文件无测试点,Windows包中包含脚本文件和测试点(以windows标准的CRLF换号为标准的),Linux包中包含包含脚本文件和测试点(以LF换号为标准的),我们一般使用Linux包。
8.P2D转换为Domjudge的包
项目:https://github.com/cn-xcpc-tools/Polygon2DOMjudge
安装说明:https://github.com/cn-xcpc-tools/Polygon2DOMjudge/blob/master/README.cn.md
使用此工具可以将Polygon的数据包转换为Domjudge的题目包。