赞
踩
最近因为一些出题的任务,了解了从 Polygon 出题 → \rightarrow → Codeforces 上添加题目 → \rightarrow → Vjudge 上挂题的完整流程,因此也在此做一个记录与分享。
整个流程可以分为下述各部分内容。
注册、创建
进入网址后,先注册登陆,然后点击 New Problem
开始创建一个题目表格,注意此处的 Name
只是项目名,不是最终的题目名。
题面
创建完成后,可以点击 My problems
进入题目编辑界面如下。接下来可以在 General info
页面编辑时空限制以及 input、output
信息。
之后进入 Statement
编辑题面。
此处需要注意以下几点:
Save
Checker 与 标程
在 Checker
页面可以选择现有的
C
h
e
c
k
e
r
Checker
Checker 也可以添加自己定义的内容。
选择完
C
h
e
c
k
e
r
Checker
Checker 后,在 Solution_files
页面添加标程。
上传数据生成器
在 Files
页面添加数据生成器的代码。可以注意到此处的
R
e
s
o
u
r
c
e
F
i
l
e
s
Resource Files
ResourceFiles 中提供了
t
e
s
t
l
i
b
.
h
testlib.h
testlib.h 文件,因此我们可以根据该文件编写数据生成器。
我们可以在 g i t h u b github github 上找到该项目。将项目 c l o n e clone clone 下来后,添加自己的 g e n e r a t o r . c p p generator.cpp generator.cpp 用于数据构造。
具体的代码使用例子可以在 g i t h u b github github 上找到,此处给出一个简单示例。此处需要注意下述代码是根据命令行参数来进行随机的,因此如果命令行参数相同,生成的数据也将保持不变。
#include "testlib.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
registerGen(argc, argv, 1); /* 根据命令行参数来进行数据生成 */
cout << (int)rnd.next(1, 10) << endl; /* [0,1] 内的整数 */
cout << rnd.next(1, 10) << endl; /* [0,1] 内的浮点数字 */
cout << rnd.next("[a-zA-Z0-9]{1,1000}") << endl; /* 符合[a-zA-Z0-9] 特点的长度在1~1000之内的字符串 */
}
用脚本调用数据生成器生成数据
在 Tests
页面编写下述脚本,点击 Save Script
来运行脚本。
运行脚本后即可得到下述的各个数据,其中点击每个测试点的 Example
可以将测试点设置为样例,即展示在题面中。
用标程跑一遍数据,测试时空限制
点击 Invocations
加入标程,即可看到标程运行数据点的情况。(此处的
O
K
OK
OK 仅表示标程符合时空限制)
Commit、Package
完成题面、标程、数据后,即可 Commit Changes
,即将当前的修改提交,类似于
g
i
t
h
u
b
github
github 的版本管理。
Commit Changes
后,进入 Packages
界面,点击 Standard
即可进行打包。打包成功后,基本的题目就算创建完成了。
目前为止,基本的题面创建就算完成了。当然,Polygon 的功能远不仅于此,更多的功能可以在该网页中了解。
最后需要注意,该题目的标识符由右下角的网址来决定,之后的 Codeforces
挂题也将使用该链接进行挂题。
创建 MASHUP
在 Gym
的 MASHUPS
页面创建一个新的 mashup
。
添加题目
进入刚创建的 mashup
页面,添加题目,此处的网址即为刚才 Polygon
创建完题目后生成的链接。
邀请其他成员
由于 mashup
在设置中是 private
的,因此我们只有对其他账号赋予权限才可以使他们能够访问你的 mashup
。
在 Invited users
中添加用户,用户即可拥有访问题目的权限。注意此处需要将 vjudge
添加进去,之后才可以在 vjudge
中检测到 mashup
中的题目。
创建比赛
在 Contest
页面中创建新比赛。
在比赛中加入题目
此处的 OJ
选择 Gym
,ProbNum
可以从 mashup
的网址找到,即对于 codeforces.com/gym/123456
,123456
即为 Gym
编号。最后再添加题目编号,如 A、B、C、D,即可检索到该题(Vjudge
有的时候会检索出错,未检索到则重试)。
至此,Codeforces
出题的基本过程就结束了。当然在 Polygon
中还有更多高效好用的操作等待大家去挖掘,去进一步提高出题效率!感兴趣的朋友可以继续研究!
最后祝大家出题愉快, A A A 题愉快,在程序设计的成长道路上更进一步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。