7 月 2 日闲话
今天一直在想,什么是题解。我担任管理以来,审核了至少 4 万篇题解,觉得有些话想要谈谈。
用户为什么会看题解呢?我觉得有以下几个原因。
- Ctrl C+Ctrl V 战士;
- AC 了本题之后看看有没有别的做法;
- 实在不会做某题;
- 根据题解去组模拟赛;
这里的话我不太想聊第一种和第四种人。一种是纯粹为了 AC 率而去抄袭题解,必然不是题解本身的用处。第四种人虽然利用了题解,但是他们又和我想聊的东西不一样。
其实实际上第二种和第三种人的行为模式是一样的,即是为了学术目的而利用题解以便更好地学习,只是说利用方式不一样罢了。
首先我想聊的第一个问题是,对题解设置严格的格式审核标准,是否无助于题解的学术性?换而言之,题解的格式要求,是否会造成学术的流失?
我觉得要说有流失肯定是存在的,因为必然不是每个人都能接受洛谷目前的一套格式排版要求,例如公式、字母与汉字之间的一个空格,
但是尽管有这些流失,但是需要注意到的是其利一定是大于弊的。我们为什么要推行一套格式的标准?如果从实用主义的角度来看,格式其本身应当就成为题解重要的一环。两篇内容相同的题解,用户应当是更倾向于去阅读排版工整的那一篇,而不是排版歪七歪八的一篇,这是因为更优秀的排版可以使得题解中重要的部分以更具有辨析效果的形式进行展示,以减少因为不当排版造成的额外阅读负担。举个例子,如果一个推式子题是规规矩矩用
而若是从审美的角度来看,在有了格式标准之后,题解便具有了外在形式的严肃性。当题解具有高度的统一格式,题解将不仅仅是题解了,而成为了一种散发着理性光辉的艺术。这份艺术更进一步巩固了 OI 其原本应有的理性以及严肃性,其本身也会使得用户内心存在一种维护当前这一形式秩序的趋势。
而当有着这一套格式的标准之后,其本身也就能带来诸多或显性或隐性的对学术这一模式的巩固。学术其本身是具有严肃性的,而当题解做到了形式上的严肃作为基调,其便利于学术的生根发芽。因而在统一的题解格式之下,用户才更能从题解中更高效地收获更多。
或许有人会说,这和禁锢思想有什么区别呢?需要指出的是,题解的审核是约束格式而非内容的东西。我们的要求是用户遵守一定的格式之下尽情发挥自己的创作,写下自己的所思,而并非要求用户写出八股文。题解的格式要求与实际 OI 中需要思考掌握的内容也是并无关联的。因而,对题解的格式要求,与对思想的禁锢是毫无关联的。
从而我的结论是,对格式的要求诚然会造成部分学术内容的流失,但是其本身是为了更大的学术氛围的巩固。
其实这一点我还得感谢小粉兔和 xht,虽然我一直在一些奇怪的方面和小粉兔进行 battle,但是必须承认的是他们两位管理都为洛谷的格式统一做出了巨大的贡献。洛谷一切对格式的要求都是从 2019 年年末开始的。
第二个我想聊的是,关于老题解的处理方式。
上面我也提到了,现行的题解审核要求是 2019 年年末开始的,而且甚至直到 2020 年年初这才完全被管理组所进行施行。这也就意味着,从 2013 年到 2019 年,这六年中存在海量的题解并未是遵守现行的格式要求的,而且当时对内容要求审核也更为草草了事。这样相当于留下了数万篇题解的大坑需要处理。如何以最好的方式处理这些题解诚然是个大问题。
我曾经想着在今年暑假开启一项计划,叫做清朗题解计划,想法是在今年暑假,以 NOIP/CSP 真题->官方题单->高热度试题的顺序,对这些试题中的不合规题解进行清理。但是经过一定的思考,我觉得不太能实行。原因有很多。
首先,大多数的试题其实都有一些非常经典的讲述,其本身已经写的较为全面,只是在格式上不符合现在的要求。对于这类题解我个人其实倾向于帮他改格式。因为对格式的要求是后来者,不应该因为后来加上的约束就把先前并未遵守这一些约束的题解给完全不顾地撤下。通常而言,此类题解大概就是在按照赞数排序之后的第一页题解。
其次,假设我把过去的试题的题解进行批量撤除,那么势必会造成更为繁重的工作量的问题。例如说“小鱼的游泳时间”这种题,稍微一不留神,一下子忘记关闭题解提交,就容易出现上百篇题解等待审核。这会造成的问题是现有社管组的人手完全不够,而且提交此类试题题解的用户因为往往使用洛谷的时间极短,其很难做到遵守现有的各种格式,造成大量的低质题解提交,更进一步地耽误了题解审核效率。但是如果说完全关闭审核仅仅接受私底下的提交,这也不符合题解尽可能集思广益的一种愿景,同时可能也更难以做到以初学者能够接受的口吻对试题进行讲解。如果是批量打回后选取几篇进行过审,也容易消磨初学者提交题解的热衷。
说实话,我认为初学者提交题解,对此有积极性是好事。我们在审核题解的时候,只要不是同一个题有近百篇题解等待审核,我们一般会逐一认真进行审核,争取给新手一个发挥自己的氛围环境。
最后,在清理题解-管理审核完题解这段过程中势必会出现一个空窗期。作为洛谷最重要的免费学习资源,当一个热门题处于题解的空窗期,用户或许只能转向 CSDN、博客园等平台,而这会为用户的学习体验造成一定的不必要的麻烦。这一段空窗期也是难以解决的问题。
当然还有其他的问题,例如“如何妥善地回应原先的题解的作者”等,但是它们更容易找到一个还可以的解决方法(例如批量发送通知等),因而不是什么讨论要点。
还有一大问题在于,题解应当有什么样的内容?
首先必然要确保的是,题解的内容应该是能够证明正确的,这一点的必要性是无可置疑的。但是尽管这么说,对这一方面的审查是困难的。洛谷上确实存在一些题解,题解的正确性是存在一定谬误的,从比较细微的一个大于号打反,甚至是整个算法的正确性都有问题,可以构造出一组 hack 数据使之输出错误的答案。或许会有人问,为什么不去审查这些?
这便是理想与现实的错位。小粉兔其实在直播的时候试过一次不仅审查题解的格式,也进行对内容的正确性的审查。结果是在意料之中的——审核的速度,不及新题解提交的速度。以小粉兔 CF IGM、NOI 2020 国家集训队的实力都做的如此艰难,其他水平稍次的管理去做这事情的困难程度只有更高。实际上目前的趋势是,如果审核的管理对这道题目恰巧比较熟悉(例如就是自己出的题,或者 CF 打过或补过的题等),那么确实会对内容进行审查;遇到 Ynoi 题有时候就会找 lxl 看一下。我觉得这样做显然是更有利于在兼顾效率的时候同时稍微保证一定的质量。据我所知 WYXkk 对正确性看的比较严格,点个赞。
上述的若干事例也可以体现出,面对海量题解,审核内容的正确性相当困难甚至可以说不可能。那么这个问题只得被搁置。当然,我们非常乐于处理用户提供的 hack 数据、对题解的严谨性指出的质疑等。尽管限于人力有穷而难以及时处理,但是多 at 几次肯定有人来的。
下一个问题在于,题解的内容应该写成什么样,才能赢得用户的喜爱?我觉得这个问题其实是没有答案的。今天在洛谷群聊了这个问题。部分用户,例如 dead_X 更热衷于看到了 Hints 之后自己推导出结果的快感;而王学逸觉得单给 Hints 又容易看不懂,最后还是得需求一份更详细的题解。实际上这也是每个人对题解的需求不同。一个人不会做一个题,原因是多样的:例如题目相当 adhoc,一下子没想到;分析出了一些性质,但是遇到了一些门槛;对于知识点本身就有欠缺等。不同人对题解的希冀也是不同的,正如是需要一份 Hints 还是需要一份详细讲稿的区别。
与我个人而言,我不希望题解成为 Hints 大集合。尽管 Hints 提示了你题目的做法,但是它只是流于“提示”,而非“题解”。题解的要求就在于它是一份详细的解答,而非仅仅是若干个提示的汇总。这也会造成题解所应包含的东西就存在多个维度。除了其本身应当拥有的内容层面,其也当具有一定的对话性。所谓的对话性就是指,写题解要针对你的目标群体,而并非单纯地炫技。
这一点在 B 组题中还是有所体现的。B 组题目前的题目大部分为一本通例题,少部分除了《图论与数据结构》一书之外,剩余的便是洛谷的各种计划的基本例题。在这一部分的题解审核要求中,我刻意地指出了下面两点:
禁止一切形式的远超过“入门”知识的知识点,例如使用生成函数完成斐波那契数列末项计算。
对于本要求中的题目分析、代码两个板块,管理会进行更高更严格的要求。特别地,题解必须附上代码。
这里每一点都是有其意义的。入门的小朋友大多可能只有小学五年级左右的数学知识水平,对于生成函数等远超出入门的知识点是不存在掌握的可能性的。而要求更详细的题目分析,也是为了让小朋友们看得懂,提供代码也是为了小朋友进行仿照学习。实际上稍微带过小朋友的人都知道小朋友其实独立编写代码的能力是很欠缺的,因而要求题解必须附上代码和更细致的分析。
既然对于刚入门的小朋友是如此的,那么对于其他的题目也应当是如此的。例如说模板题就应该从头到尾讲述模板,而并非是这种内容;对于一个需要注意结论的题目,最好列出结论同时给出一个至少是感性的证明;对于一些容易写挂的细节也应当是要指出的,而并非提供一个可读性极差的代码就不管。这便是写题解的时候应当要担当的社会责任,你要知道你写的是题解而不是博客,这也是题解与博客的最大的不同——个人博客可以是自己的随心所谈,例如闲话,而题解是给其他用户进行学习的。
这里又需要引入一个概念,一个题目必然有其针对的目标用户。例如一个 CF diff 3500 的题目,自然不是给 pupil 做的;一个 diff 800 的题目,给 tourist 这种水平的做可能就一分钟。一个题目的目标用户的水平应当是可以、或者勉强可以、或者差一点可以在一定的时间内(CF 的 2h,或者国内大型 OI 赛事的更长时间)独立地完成这一试题的。当然这里又要值得一提的是,因为比赛不是只有这一个题目,这里刻意采用整场的时间,只是去确保选手的能力最多只是在赛时刚好能完成本题。换而言之,如果一个选手的实力强于这个题目的目标选手的实力太多,除非是奇怪的 adhoc,不然往往不会做太久;如果一个选手的实力弱于这个题目的目标选手的实力太多,容易罚坐,想不出题目。而目标用户具体怎么量化是存在困难的,一定程度上可以用 CF rating 与 difficulty 的关系进行量化,可能能胡诌一个
因而,所谓的题解是给其他用户进行学习的,可以再进一步特化为,针对试题的目标用户进行学习的。只要目标用户能够从中学到许多,完成本题,那么这个题解就是合格的。反之亦然。这也就是意味着,对于简单题就应当有着充分的叙述,因为简单题的目标用户可能就是 Pupil 或者以下,普及组二等的水平,这也需求题解的讲述更加清楚,而不是以一个 CF GM 的视角觉得“傻逼题”。反过来,如果你这个题目有 CF diff 3000,也不必事无巨细地从所需要用到的模板甚至从位运算开始讲(除非这个题有依赖于比较特殊的位运算的性质),因为能挑战这种试题的人本身就有着较强的信息检索能力和理解能力。但是这也并不意味着将题解写成提示的并集。
闲话说的有点多了,就说到这里吧,之后有空会专门再写点。