【杂谈】关于“毒瘤”这个词

前言

今天我学了正好一年OI,有一个现象很看不惯,就是一些OIer乱用“毒瘤”这个词。有些人码风跟自己不一样,就说他“毒瘤”;有些题自己不会,就说出题人“毒瘤”……诸如此类,数不胜数。但是,一些正常的Coder或出题人被人喷成“毒瘤”,真的很窝囊。其实究其原因,有时事实却是骂别人“毒瘤”的人自己实力太菜。所以,我要谈谈我眼里什么叫“毒瘤”。

个人理解

我是一个比较喜欢数据结构的佛系OIer,所以我认为“毒瘤”的范围比较小。

经过本人观察,“毒瘤”一词经常被用来修饰题目和码风,所以本文分两部分谈谈我的看法。

毒瘤题

我对毒瘤题判定的标准很简单,只有两种题我认为是毒瘤题:

  1. 出题人有意无意在非本题希望考察的主要知识之外的一些边角上做了文章,让一些本来可以AC本题的做题人无法AC,或者无从下手。
  2. 考察的知识点偏、怪。

第二种不需要多解释。就比如说你在NOIp考场上冷不丁出了一道万年不考的高斯消元/插头dp/悬线法,又或者是一道几乎背离OI的O(1)结论题又暗示NOIp2017D1T1这样算作是偏、怪。什么大模拟,树套树,大量数学推导之类的,属于我们应当练习的范畴,我们不应该因为它码量较大或者思维较难,把它们称为“毒瘤”。

第一种毒瘤题很多。比如恶意卡算法,卡常数之类的。你网络流题只能用HLPP写恶意卡Dinic/SAP,求LCA树剖倍增过不了只能用ST表或者Tarjan,那必然毒瘤。又或者使用正常的scanf/printfcin/cout并关闭流同步解除绑定会超时,只能使用读入输出优化甚至fread,那也是毒瘤题。还有一些其他的“毒瘤”现象,比如这道题的输出,特别嘚儿。

毒瘤码风(OI,非工程)

毒瘤码风范围虽然较大,我也归结为两点:

  1. 可读性差,或者不适合OI
  2. 有一些奇奇怪怪,非主流的东西

可读性差的范围就比较广了。比如变量名、函数名巨长,虽然适合工程,但是对OI不利。这里谈一些可能被认为是“毒瘤”的地方

缩进

两格四格无所谓,其他的话那肯定毒瘤。

大括号

换不换行无所谓的,个人习惯,不影响阅读。

空格

符号变量间的空格加不加无所谓的,个人习惯,不影响阅读。

压行

这个争议有点大,我说说我自己的看法。

要是两三句简单的变量赋值或者计算压在一行我个人感觉无所谓。但是一些毫无关联的句子放在一行,我真的很不爱看。还有,对于三目运算符的使用,我是比较支持的。但是我讨厌没有返回值的三目或者三目套三目,这样就很毒瘤了。

比如这样我不喜欢

(a <= b) ? (c = d) : (c = e);

这样我可以接受

c = ((a <= b) ? d : e);

一些函数的使用

输入输出使用iostream还是stdio都可以,又或者是读入优化。min/max/swap/abs#define、手写函数、或者标准库里面的也都可以。个人习惯不影响。

其他奇怪的东西

关于函数名和变量名的定义,如果让人“不知其所以然”,自己写出来的名称到最后忘了是什么用,这个当然不可取。所以最好使用英文单词及其缩写/希腊字母读音

比如一些奇奇怪怪的#define,或者是特别啰嗦,还有头文件不在开头定义,括号赋值,循环变量不在for内定义,诸如此类。

写在最后

很多人乱用“毒瘤”一词,看似无辜被坑,实则乱甩锅。俗话云:可怜之人必有可恨之处。如果只有少部分人认为某题某人“毒瘤”,那并不是毒瘤。所以希望OIer们可以明辨是非,切忌人云亦云,又或者知难而退,有人说“毒瘤”,就不去思考,这样的做法是van♂van ♂不可取的。