近来被迫用Polygon造题。
polygon是codeforces开放给公众使用的一个造题平台。
地址是https://polygon.codeforces.com
由于平台是全英文的,所以这篇教程是面向懒得看英语的小伙伴们的。
优点是用polygon造题,出锅率小,自动化程度高。
国内访问不稳定,快如闪电和慢似蜗牛交替,令人抓狂。
是codeforces的造题工具库。
可以写gen(数据生成器),checker(常说的spj,包括简单文件逐行比较也算),validator(用于检验数据合法性)。
具体的使用方法请看:https://github.com/MikeMirzayanov/testlib
要本地编译的话,放进minGW64的include目录内就可以编译含#include "testlib.h"
的程序了。
第一步,新建题目。
名字仅允许小写英文字母,数字和连字符’-’.
polygon上造题是有轻量的版本控制的。服务器上会保存一个版本,每次你可以将当前版本爬取到本地,然后进行修改。任何修改都要commit,否则只会保存在本地。
所有的改动都列出在了上面,但凡是列出的改动都是未commit的本地改动。
在这里你可以设置输入输出文件名,时空限制等等。
右侧的are test well-formed选项建议勾选,会自动检测你的输入文件是否well-form。不合格的输出文件将无法通过Verification。具体要求请看小字。
还可以开启交互题选项和部分分选项、添加算法tag之类的。
这就是传说中的题面和题解。
传一些gen,checker的地方
注意gen的随机数种子由后面跟的参数的hash值生成。
选择你的checker,若使用自己写的checker在files上传。
可以使用自带的一些checker,有说明。
checker的写法请看旁边的examples.
还可以在下面的checker test部分为你的spj添加几个例子测试。
每一组你上传或者生成的test都会经过validator的校验。
写法参见examples.
格式要求严格到换行和空格都要一一读入。
放输入数据的地方。输出数据由std自动生成。
(这样你就不会有std过了自己生成的数据所带来的无锅感
输入可以手动生成上传,也可以用写好的gen生成。生成需要一个脚本,语法看旁边说明即可。
样例也在这里设置。
传完记得preview test,看看有没有没过validator的。
在线对拍
可以使用你的数据生成器来对某个程序进行长达120s的对拍。
并且可以将使得该程序与main correct solution答案不一致的数据一键add to test
似乎会在gen的参数后面随机加一个字符串
传std的地方
当然也可以放各种暴力和水法
然后给他们标记成你期望的结果
与期望的结果不一致是过不了Verification的,
main correct solution会被用作标准解法来应付hack之类的东西.
用test测指定的程序的地方。
相当于custom test了。
返回的结果代码有点迷,要猜一会才知道意思。
更有可能爆各种奇奇怪怪的错…
别人给你issues的地方。
打包的地方。可以下载题目包。
管理权限的地方。可以多人协作造题。
(假如冲突了我也不知道会发生什么