【杂记】 怎么出一场 CF

怎么出一场 Codeforces Round

一场 CFR,我们断断续续出了半年的 CFR,两个小时,昙花一现般地落幕了。整天咕咕咕,最后赶 DDL 的 isaf27;绞尽脑汁一起出题的 lsqs;每天翘首期盼不断翻看的 telegram 群组;上线下线阴晴不定的 coordinator……诸如这样的记忆在我的脑中挥之不去。

CFR 706就这样结束了,Announcement 从原来的 0 赞,到 400、到考前的巅峰 500、再到考完的 400、几天后又涨回了 500。说实话我我看到某题 fst 率高达 30% 的时候我完全已经做好了 blog 被 down 到负数的准备。为了让各位出过 CFR 的大佬们或者不打算出 CFR 的大佬们当个笑话看,让各位准备出 CFR 的大佬们提前做好一些准备,这篇无聊扯淡(刚查了一下发现竟然不是 che3tan2) blog 就诞生了。

前期准备

  • 一个 CF 账号。一个基本要求是 CF 账号打到黄名(2100),最好能红,这样后续跟 coordinator 对线才有底气
  • 5 道难度递增的题目。(没错,即使是出 div1 也可以先只交五道题目,后续再补即可,我们就是这么搞的)

搞好这些之后,你就可以在 codeforces 主页上找到 Contest proposals,创建一场比赛,然后将它 publish 就行了。

由于我们没有私信骚扰过 coordinator,所以交审之后就陷入了无尽的等待,还好我们的等待时间不是很长,仅仅 4 个月的时间,我们就等到了 coordinator 的大 BOSS:( extrm{Kan}) 的回应。

他会对题目进行一次初审,筛掉一些所谓套路题。这个时候由于你的总题目数量减少了,你要迅速补充那些空缺位置的题目(如果要出 div1 也顺便把之前没出完的题目补了)。如果 Kan 2-3 天不回复,可以直接在 proposal 里回复他的这句话,提醒他来继续审题。

如果 KAN 看你非常有诚意,题目也还行,那么他就会叫来一个其他的 coordinator(有可能他自己亲自上阵),来与你进行之后的对接。

中期

与我们对接的是 ( ext{isaf27}),他好像当时与我们对接的时候有点忙(加上我们,他当时一共在审三个比赛 Orz),所以比较鸽子。

比较草的一件事情是,如果你在这个时候不小心 "make contest private" 了,其实是不要紧的。不要问我为什么知道

然后我们就大概知道了 CF 的一些出题潜规则,比如:

  • 简单题题目描述不能太长,不要阅读理解
  • 不能出大数据结构(指代码巨长)。
  • 简单题最好别涉及概率期望。
  • 简单题要不管什么样的语言(python, javascript)都能过。
  • D2C 及以前不能出 dp。(惊了!!)
  • 思维题能加大过审概率
  • 出数据的时候一定要造很强的 pretest "as strong as possible!!!"(所以出题人并不是有意想让人 fst 的呀)

我们当时的题目配置是这样:

  • 2A。最后比赛中的 2B。
  • 2B。最后比赛中的 2C(1A)。
  • 2C。最后比赛中的 2E(1C)。
  • 2D。一道计数,最后被毙了。
  • 2E。最后比赛中的 1E
  • 2F。最后比赛中的 1F
  • 1E。一道 FFT,最后由于太难被毙了。

isaf 找上门之后就开始一个一个的口胡题目(注意到他的口胡经常是假的)。在审完若干个题目之后他就会对你说,“我们要不先来准备一下过审的题目吧!”于是丢给你一个连接,要你 read it carefully。然后我才知道原来每题的 pretests 数量是有限制的。(所以在很多情况下都要多测)

这个时候可以问问 coordinator 有无联系方式,当然他也可能会主动提供。一般来说可以用 telegram 或者 hangouts(需要****)。

接着你就需要在 Polygon 上准备一个 Contest,然后把权限丢给 isaf。

接着是造题过程中,我觉得几个比较重要的事情:

  • Polygon 没有提供版本冲突解决的问题,所以在修改 Polygon 上的文件的时候请务必,务必确保两个人没有在修改同一个文件(修改不同文件没问题)。
  • 请务必熟练使用 Polygon 的功能以及用 testlib 库编写 checker,validatorgenerator。如果不知道怎么搞,可以找 coordinator 要之前比赛的 READ 权限,看看他们是怎么写的。OI-wiki 也有一定帮助。
  • 大部分 CRASHED 的情况都是 gen、validator 写错了,注意检查。
  • tests 部分要新建一个 pretests。善用 COPY/MOVE 功能。注意 MOVE 是移动测试点顺序的,而不能从 pretests 移动到 tests。
  • 有问题可以直接问 coordinator,他会直接回复
  • 可以与 coordinator 对线,虽然你基本不会赢
  • 简单题写清楚点题目描述,写清楚点样例解释。少来数学公式,大家都不喜欢看。
  • 尽量避免 Chinglish 和俄式英语(虽然我自己题面就是我自己直接写的,没用翻译,不知道是不是看起来有点 Chinglish)。可以给浏览器装一个 grammarly 插件,能检查出一些小语法错误。但即便有这个插件还是建议人工检查。这个插件有时候不屑于检查连词出错的情况,也无法检测句意不合逻辑的情况。

后期

这个时候应该题目都基本造完了,可以叫一堆 tester 来验题力!验题工作会在一个 GYM 的 mashup 里完成,tester 需要 vp 这场比赛(然后你就可以实时看着 ta 如何被 lsqs 的神仙题踩)。一般来说 coordinator 会帮你找一些 nb 人士(rating 都比较高),你也可以自己找 nb 网友来验题(建议少叫一点沙雕网友,多叫一点有验题经验且最近有足够多时间的人)。

对于我们的题目呢,非常不幸的是,看起来某构造题(最后的 1C,在 test 的时候是 1A)区分度十分奇怪。于是我们必须要强行加上一个题目以平衡难度(最后的 1B)。作为牺牲,一道 ** 题(test 时的 1D)被迫删除。这个时候被毙题也不要太懊恼,认真完成自己的工作就行了。

接下来会有一些十分用心的 tester 帮你各种写挂题目测试你的 tests 强度,我要特别感谢 ( ext{3.141592653})( ext{aajisaka})。如果没有他们的贡献,我们的比赛风评就没救了。以及我们这次比赛最大的教训就是:简单题一定要开多测!!!构造题、最优化题、非自适应性交互一定要防随机化!!!

可能在最后 2、3 天的时候,coordinator 依然没有完成俄文翻译,请不要着急,这是正常现象。

Announcement 直接对着之前比赛的抄抄改改就行了。做题目翻译的人如果不是 coordinator,记得不要忘记感谢 ta。

比赛开始之前不要去到处宣传“strong pretests”,尽量控制住 tester。静静等待 contribution 增加就行了。

比赛的时候不要沉迷看榜,事实上我们 4 个人回答问题都没什么时间看榜,开始 5 分钟之后你大概会感受到成吨的问题向你扑来(所以多叫几个人出题是有好处的)。

  • 注意当你看不懂别人的问题的时候,直接回复 Question is unclear 就行了。

  • 如果别人用俄文问,别管 ta,coordinator 会帮忙回复俄文问题。

  • 如果别人用你的母语(非英语)来提问,直接回复 Please use English。

注意有很多人提同样的问题的时候就要小心了,极有可能是题面出了锅,这个时候 coordinator 就回去发 Announcement 补锅,回答问题的人就变少了。

考完之后 fast editorial 有点赞加成。有 weak pretests/fstforces/speedforces/conclusionforces/bad contests 的时候立正挨打,别怒斥做题人(如果可以的话商量好找别人来怒斥做题人也是可以的,当然我们没干这种事)。

大概会有人来私信问你问题,耐心解答一下就好了。

尽快回归平常生活,被喷了也不要太放在心上。


后记

感觉写的不是很清楚 TAT。有什么问题欢迎在评论区与小编讨论哦!

原文地址:https://www.cnblogs.com/imakf/p/14532691.html