竞赛讨论区 > 【杂谈】关于出题的那些事
头像
四糸智乃
发布于 2021-03-02 15:19
+ 关注

【杂谈】关于出题的那些事

看到有人在吐槽牛客比赛的题面风格,想必肯定是游戏体验不好。我们来聊一聊,为什么游戏体验不好。
首先牛客网的竞赛区的群体是由ioer和acmer两部分组成的。虽然大部分出题人都是现役选手,但是不是所有出题人都是两边都打过。偶尔会有oi大佬来出个acm赛制比赛,或者acm选手去客串出出oi。
在牛客出acm赛制题审核是比较宽的,基本上都能来玩一玩。出oi赛制要求要高一点,至少有oi参赛经验。
oi题和acm题风格其实是有差异的,如果不是刻意去迎合某一种风格的话,一眼就能看出来出题人是oi选手还是acm选手。

我认为是需要根据比赛类型去调整题目风格的。

OI风格

输入输出描述

(随便举个例子,和出题人无关)


就这种在输入描述中给出变量,然后在题目的最后面的备注中给出范围的都是典型的oi题风格。
可能会有没打过oi的acm选手觉得,那不就分个段分下档,就把一道acm题目改成oi题目了,暴力一档,加点优化一档,std一档。
这话说的吧,对也不对。确实能这么强行把acm题改编成oi题,但是这绝不是优质题目的出题思路。

优质题目除了“暴力”,“优化”,“std”三档以外,肯定是要特殊测试点的。比如树上问题,常见的特殊测试点有“单链”,“菊花”,“随机树”(深度期望是log)。

加了特殊测试点以后再用“XX%的测试数据保证啥啥”可能就比较啰嗦了,比较好的方案是和联赛一样打个表格。
(随便举个例子,和出题人无关)

这样就很清楚,选手知道你有20个测试点,每个点5分。有多少个特殊测试点满足什么性质,这样的题目是有作为优质题目的潜质的。

样例

先不谈大样例的问题,oi题最好保证试样例具有一定的强度。不然一个很复杂的题目,它的样例是一个随便拿jio写的程序都可以通过,根本没得测。其实选手体验很差。

acm风格

输入输出描述


这种在输入输出描述中直接给出数据范围,并且数据范围紧跟在输入的变量后面。同时如果变量有特殊性质也会在此处给出。
出acm赛制题目的时候尽量

不要把数据范围放到备注里面
不要把数据范围放到备注里面
不要把数据范围放到备注里面

给大家讲这么个故事,说某网络比赛有这个么个图论题,n个点,m条边。有点权有边权,这个边权吧,还是个pair类型的,有两种属性。然后这两种属性范围还不一样大。
大概是这么个类似的情况

备注:


不过样例还算友好,给了贼大一张图,大概二三十个点吧,但是贼长啊。
然后机房暴躁老哥拖着浏览器右边的条上看一下,拽下来看眼范围,然后拖上去,然后拖下来...然后骂出题人S B。

就你出题人一定要有一个意识,就是题目风格是和比赛适配的。
OI题把数据范围放到最后面除了“测试点要分段”这个刚需以外,更重要的是OI比赛是3.5个小时编写3到4道题目。
你这个时间是需要选手对于题目进行精读,然后思考的。
如果把数据范围跟到变量后面,在题没读完的时候突然蹦出一个数据范围会打断选手思考。
它更适合选手读完题,脑子里蹦出一个算法,然后选手去后面的数据范围适配一下,看能拿到多少pt,然后再优化更新想法,这么个过程。
acm赛制就不一样了,5小时10~12道题,假设一场比赛最后做出7个题。平均算一下一个题的实际用时也就oi赛制下的一半。
而且这7个题里绝对有“垃圾题”,看完就知道是啥,知道是啥就能写,写完一交就过。就是需要“节奏感”。而且越强的队越需要这个东西。
大佬队是怎么打比赛的呢,一般是ABC三个人各自开题A读完题,同时BC也读完了,然后在纸上面划拉划拉,手算几个样例,A上去把题过了下机换B,B打完换C。
大佬读题读到数据范围的时候其实脑子里已经有大概算法了,这个时候选手更需要你直接给出数据范围确认思路是不是正确。

题面描述

确实,有些题目描述很恐怖。就,不讲人话讲谜语。仔细一想也不是看不懂。首先是确实有的题目要求的描述很复杂。
对于复杂内容的表述,可以用定义法进行拆分,没必要一句话中包含过多的信息。
举个例子:
求s到t的路径中所有边权的最大值的最小值
定义一条从s到t的路径中所有边的边权最大值为:s到t的“瓶颈值”
求s到t的最小瓶颈值。
第一种描述肯定会让别人难受,你能看的懂第一种不是因为真的看的懂这句话,而是因为你做过类似的题,万一再没做过类似的题目。那估计直接开喷。

很多时候题面写的真的很烂的出题人会反驳,“怎么XX大佬看的懂你看不懂?”。拜托,人家几千个题的刷题量,萌新可能才几百题。包括我也是有的时候真的看不懂题,我只是get到出题者的意思了而已。

对于一些专有名词,专业术语。尽可能在后面给出解释。
你看CF上的比赛只要涉及到出现“异或”这个专业术语的时候,后面至少会给个wiki的链接,去解释什么是“异或”。
比如说出一道取模条件下输出一个分数的问题,最好在备注里面提一句,确实,真萌新估计连这个都不知道不可能做出题。但是“题能看懂但是不会做”和“我连题都看不懂”是两个游戏体验。
包括数论题里面经常见得这个,这个中括号,学名叫做“艾弗森括号”的东西。题目中如果出现了,那多少提一句是啥意思。

题目里面的公式尽量用LaTeX搞,1e8,1e9也不要这样直接放着,或者干脆让选手数0,可以试试这个在线的公式编辑器工具,需要什么点一下。用熟了其实很多东西可以手撸 https://www.codecogs.com/latex/eqneditor.php
几何题那种切线切点圆啥啥的,能用几何画板画出来截图尽量用。可以尝试一下这个在线工具  https://www.desmos.com/calculator?lang=zh-CN

一些比较长的题面要注意分段落,长题面不分段和打字没标点一样,读着脑袋疼。
你可以在一些想要强调的话,例如题目的重要条件之前分段落,这样被强调的内容就出现在段落的段首,不会出现重要条件选手星际没看见的情况。

比如这里这段话就是我想强调的重要条件,就选择在这个条件之前断开单独分一段。
当然这个“强调”并不见得都是帮助选手解题的,如果题目有一些坑点,也可以强调一些诱导性的话把人骗进去。

题解

题解未必就越长越详细就越好,这个东西我感觉因人而异,有人喜欢看长的有人喜欢看短的。
对,我喜欢看短的题解。长文题解有的时候太啰嗦,而且每一处的细节未必他处理的很好,都可以拿过来学。但是众所周知呢,我发题解一般都是长文详细题解。我是比较喜欢多分享点内容那种。
官方题解的风格不是很重要,我觉得能保证做法正确就ok,毕竟每次比赛结束有那么多大佬写非官方题解的。大家看题解一般也都是自己搜,选个自己喜欢的风格看。
对于std要不要公开,我觉得公不公开都行,毕竟比赛结束AC代码都是公开的,反正我是每次都公开std。但是有一种情况,一个题没什么人过。我觉得这种题的std出题人有义务公开一下,这么牛逼的题你还不拿出来展示展示?

杂谈

现在牛客上面的题目质量跟两三年前比起来高多了,我感觉早期是真的假题原题满天飞。我感觉很多什么“题面语句不通”,“排版混乱”,“公式不会用LaTeX”。很多这都是出题人没怎么出过题,经验不足。
牛客不会说你来出题它给你培训一下什么地方该写成什么个格式。多来出几场比赛肯定就懂了。有瑕疵的地方没必要到处喷,在题解下面提醒一下或者私信交流都行。万一喷走了人家好歹来出过题,来一个新人出题喷走一个。每次都是新人出题,那体验更差。
你看我第一次来牛客出题那是什么时候,那是牛客练习赛34 https://ac.nowcoder.com/acm/contest/297 那会清楚姐还没来竞赛区呢
“题面语句不通”,“排版混乱”,“公式不会用LaTeX”,这不全占了。
我在本地oj的出题量大概有个300道左右,其中有150道左右拿出去卖到了各个平台。

话又说回来,CF的出题人其实人员更混,除了竞赛选手还包括一些大学教授,算法爱好者,甚至一些在职程序员。但是你一看CF的题,从题目的格式上面是统一的。
那有的时候没办法,CF那边管理员审题人验题人,人手比牛客多个两三倍。
我给你举个例子你就知道为什么CF能保证题目格式统一,牛客系列***格五花八门了。
之前和时津风组车队去CF出CF round,出题人录完题第二天找不到自己的题了。
就为啥呢,因为Mike(CF管理员)把题目描述大改,加了一坨解释说明的内容,甚至还配了张图解释样例。他没跟出题人讲这回事,就他觉得是你话没有讲清楚,我帮你解释一下。
当时在CF出题也是拉的QQ群,300iq、Mike他们有国际版QQ的。

怎么说呢,出题人审题人注意一点是有助于增强选手的比赛体验的。选手做完不爽去题解下面提一下就行,也没必要到处喷。看完题解,来都来了点一下那个赞。或者觉得比赛质量很高也可以去点个赞,没准人家高兴多出几场。

然后呢到了春天,大三的同学就特别想实习(

啊,不是,方舟这不快开联机了么,好友还没满。官服 四糸智乃#5815

全部评论

(8) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐