polygon出题教程

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-wikicnblogluogu等,其有被称为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 来检查。

编写可以参考:CF官方说明oi-wikiluogu等。

文件上传可以参考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的题目包。