突破信息奥赛生的天花板

· · 个人记录

一份合格的代码应该是怎么样的?

转载自 https://mp.weixin.qq.com/s?__biz=MzIwMzcxMTY4OQ==&mid=2247485213&idx=1&sn=cb5b09a977ffb2d2c83cae128ca1fdc5&chksm=96ca72bba1bdfbad02766c2c0403feb00d10a1b7e46a3721a8eafa1070ee81be0a71f47035da&mpshare=1&scene=23&srcid=0704KtET5ePmicTo4wnoKbi4&sharer_sharetime=1688438346254&sharer_shareid=250c7aecc8713bc61b5879e10802c7e6#rd。

大家好,这里是小周老师。

今天本来想写个短一点的,主要是来发个给家长在线答疑的时间。

而且,今天也是明确来招生的,所以写太长不是我的本意。

可是呢,偏就碰到了个有趣的事情。

所以,招生归招生,还是放点有趣的事情来分享。

在开始之前,先帮您规划一下阅读方式。

如果您是:

  1. 已经和我们接触过好几次的家长,目前还没有加入小周老师的奥赛队的,建议从头到尾读完。
  2. 关注这个公众号的家长,但在别的机构交了钱了,也不知道能不能退, 那也建议从头到尾读完。
  3. 特别关注信息学奥赛,上过或者没上过奥数两可,就想知道什么时候入坑信奥最合适,同样,建议从头到尾读完。
  4. 其他类型,那可以看省流,直接跃迁到最后一节。觉得合适,扫码联系我们。

省流:

  1. 赛季?就在期末考试之后!
  2. 小周老师奥赛队有何不同?
  3. 什么叫做名师?
  4. 十条秘籍
  5. 名师的考前讲座!

最近真是比较多产,这都是最近的第四篇公众号了。

原因其实也简单,那就是,马上初中联赛的赛季就开始了。

1- 赛季?就在期末考试之后!

所谓赛季的概念,就是时间安排,精确到天。

赛季开始的时刻,基本上就是7月8号的这个周末。

对于新人,就只有两种剧本:

A- 零基础起步。

既然是零基础,那就说明,只要差一天的课,六小时,那就跟不上了,所以就只能等暑假末或者秋季的另一次零基础;

如此一来,9月份的初中联赛的初赛,就算是一定打水漂了。为什么说一定呢? 是因为一个暑假过去了,甚至都不知道cout是干什么用的,这样的知识储备水平,不论是考什么,都只能蒙。

一定过不了。

同时,从另一个角度上来说,暑假是最能磨练新晋奥赛生的意志品质的时期。经过了暑假的集训,从强度上就一定能适应后面展开的每周的信息奥赛学习;同时,对于马上9月份到来的初中联赛的初赛,在心理上也有所准备。

B- 初赛夯实。

在初赛的战前准备上,中途插班显然可行性比较低。因为初赛的知识密度过大,差一天的课,听起来就费劲,更别说中间差个5天空降了。

到了9月份,差一分不过,就是5个小时的学习时间不到位。

而这五小时,绝不是考前熬夜两天一天两个半点儿弄出来的。这一定是平时每天的积累:每天多花30分钟做题,5个小时,是10天。算上一周工作5天,这就是两周。

基本上,这个时间线,就对了吧。

所以,等过了7月8号,小周老师的公众号就又要歇着了。

写了也没啥用了,赛季都已经开始了。

而且,赛季开始之后,就算是我想写,也没时间。

每天带奥赛,忙死了。

///

如果要用一个复句来说,那就是,

垃圾机构拖一个月的课,小周老师一次课完。

///

2- 小周老师奥赛队有什么不同?

如果用短语,那就是:

成绩好。

如果再用一个,那就是:

老师强。

所以小周老师不好约,是有原因的。

但这些,都太抽象了,是不是?

先说第一个短语好了,什么叫做,“成绩好”?

这个其实蛮好形容:

高中联赛一等奖几十个;

初中联赛一等奖几十个;

NOI国赛金牌,差不多到今年就有了。

NOI国赛银牌,三枚。

APIO银牌,三枚。

NOI全国冬令营铜牌一大把。

提高组初赛通过率,95%+

普及组初赛通过率,70%+

其实这些成绩,和新人家长们,都没啥关系。

新人家长就关心一件事:

我家的孩子,到底适合不适合学奥赛?

这件事儿,我说过了,你去问不咋样的机构,那就是与虎谋皮,绝对得不到答案。

本来不咋样的机构的老师质量就不咋样,您再问他这种有可能让您决定不在他这里学信奥的问题,这就好比您问:

我可以给您一万块钱,但现在我打算拿走,您觉得靠谱么?

他肯定觉得不靠谱。

所以,这就涉及到第二个短语: 老师强。

你去问名师,才有可能听到一个比较靠谱的评估。

比如小周老师。

原因非常自洽:

名师没时间和学不出来的孩子瞎耗着。

不差这个学费,差这个时间。

单位的时间,要产出单位的成果才行。

名师见得孩子也多了,稍微一问就能知道孩子的水平。

光说名师,就太抽象了,虽说小周老师的亲师哥是图灵奖,隔壁系的师姐是诺贝尔奖,师叔祖是居里夫妇吧,但这并不代表所有小周老师的同学,都能是名师。

学术和教育背景,和教学经验,这是两个件事儿。

所以,这就有了下一个有趣的实例。

3- 啥叫名师

回答这个问题之前,我们可以先想一下,什么叫做名医?

名医就是,稍微问一下病人的症状,略加观察,就知道什么问题,药到病除。

名师就是,连问都不用问,就知道您家孩子程序写的什么样,有什么问题。

至少小周老师的标准上,名师得是这样才行。

恰好,前几天有位家长,家里的娃算是有些基础,想要提升,通过朋友介绍,找到了我。

大致了解了一下情况之后,提出了一个疑虑:

您的要求看来挺严的,那是不是,娃要是和您学,得从头开始?

小周老师就乐了。

看来又是一个不信邪的家长。

于是,小周老师就这样和家长预测了一下:

这样吧,您可以发个他的程序给我看。

在我看程序之前,我可以预测一下大致写成什么样子:

  1. 有万能头文件
  2. 用C语言的格式
  3. 用scanf 或者/和 printf来读输入输出
  4. 用cin,大部分都用cin
  5. 如果用fin,如果用c++,用的就是freopen,不是ifstream
  6. 全部程序都在main里面,只有万不得已,才会写方法(函数)
  7. 命名一定是a,b,c
  8. 变量一定不会初始化
  9. 数据结构一定用的是静态数组而不是动态数组

我在微信里说,倒是不用从头开始学,但是,习惯不好,肯定有天花板。

小周老师: 那倒是不用,知识不会有大错,习惯一定是差的。

小周老师: 我预测好了,您随便发一个他平时的作业。

小周老师: 习惯差对于绝顶聪明的学生来说,影响有,但不会太大;习惯差对于一般聪明的学生来说,基本上就是盖上一个天花板。

小周老师: 所以这不是我个人喜好的问题。

小周老师: 您既然找过来了,就是我以前的家长推荐来的。一般来说,都是咨询老师来负责和家长对话。

小周老师: 我只负责和开始上课的家长对话。

小周老师: 看完程序之后,我再和您说一下价格,如果差不多在预算内,我就推咨询老师给您;如果不是,那也给您指出了潜在的问题,算是结个善缘。

然后,过了一会儿,这位家长就发来了程序。

(在新窗口查看)

于是,小周老师就标注了一下:

(在新窗口查看)

4- 十条秘籍

我来逐步注释一下:

1- 不要用万能头文件 (第一个错)

为什么不要用? 那我问问,初中高中数学考试,或者高考,为什么不让用计算器?

因为要考察的是计算。

这里是一样的:信奥考察的是对各个库的理解程度,以及之后衍生出来的灵活应用能力。

如果依赖万能头文件,是能少写一些程序,但最后,自己用了什么C++中的库,完全不知道。

这就任何体育项目(不管是脑力还是体力)中的训练,完全相悖。

2- 用C语言的格式

明明用的是C++,偏喜欢用C的格式,这就属于返祖。

这也说明,老师根本不会C++。

在这个例子中,这位同学还真不错,写得正经就是C++。

3- 同2, 是C的输入输出,略过

4- 用cin (第二个错)

cin是在console端读数据。

但为什么不要用cin?

简单,我给你一个长达100个字符的0和1的数列,来吧,手算吧。

行么?

别说100个了,就是10个字符,手动输入,也有误差的可能。

所以,当然不要用cin来手动输入。

肯定是读文件。

而且,真正参加初中联赛的复赛的时候,考试系统用的是cin判卷子吗?

当然不是cin,是文件读写。

所以再次的,当然不要用cin。

5- 这个和提高组的代码执行效率有关,就不介绍了,略过

6- 全部程序都在main里面,不到万不得已,一定不用函数(第三个错)

这是个三本出来的根本没有正经写过一行软件的小师傅的一个通病。

那就是把所有程序堆在main也就是程序入口里面。

能不能运行?

能运行。

容不容易错?

很容易错。

好不好纠错?

极难纠错。

我们游戏软件行业有个真实的笑话。

有个游戏开发团队,程序员跑路了。所以主策划就提刀上马开始自学程序。

但这个主策划是学中文毕业的,根本不是科班出身。

偏偏他又绝顶聪明,于是,他就把整个游戏都写在了main里面。

大概是二三十万行程序。

他也没觉得有啥问题。

游戏也确实能跑。

后来这个游戏上线之后,被好事者给反编译了,一看里面程序,当时就吓绿了!

反手就把程序截图发在论坛上了。

惊恐地说,“他们!竟然!全部!写在!MAIN里!!!!”

结果引来一大堆猎奇的玩家来围观。

到最后,销量确实出乎意料得不错。

其实,大家围观就是一件事儿:你是怎么把整个游戏写在程序入口的?

这就好像有人说要起个100层的高楼,然后用牙签搭了一个。

大家于是都来参观。

到今天,说起这个事儿,大家还是当成笑话说,而不是说这位游戏开发者如何力挽狂澜。

所以,不要把程序都写在main里面,丢人,

这是个基本要求。

7- 命名一定是abc(第四个错)

这应该是谭浩强老师傅的锅。

这位老先生我就不介绍了,基本上是在误人子弟上,走上了一条不归路。

在任何成熟或者半成熟的软件公司中,都绝对不允许a,b,c这样的命名。

为的,就是程序可读性。

程序可读性,是在危难时刻,能够拯救考场上的奥赛生的重要品质。

只可惜,三本小师傅们,听都没听说过这件事。

8- 变量一定不初始化 (第五个错)

在C++里面,全局变量不初始化还有个初值,局部变量不初始化,那,用的时候一定会是个随机值。

如果觉得不初始化,值也一定是0的话,那就大错特错了。

这种属于,高危险度的动作。

堪比过马路不看红绿灯。

对,就这种危险度。

9- 数据结构一定是静态数组不是动态数组 (第六个问题【不算是错】)

静态数组一般在初中联赛的范畴,完全是可以被更稳定,更不容易错,但稍微用起来有点麻烦的动态数组替代的。

但有些三本师傅,他们学的时候,就学的是遗臭万年的谭浩强老师傅的C语言设计,完全就没这根可以用STL库中的动态数组的弦儿,于是,很自然的,他们教出来的学生,也不知道有这么个东西可以用。

用动态数组不会出现插入数据的时候的数组越界啊,小朋友。

就初中联赛这么点儿运算量,动态数组比静态数组多浪费的这些腾挪数据的时间,完全就是可以忽略不计的。

真正需要用到静态数组,是DP,是哈希。

不是平时做的这种小破题。

所以,这虽然不算是个错,但是个潜在风险。

10- 能不加大括号,就不加(第七个错)

这个其实我是没想写,虽然我知道一定会有。

只不过当时写的时候,从1到9,凑9个,就没写。

不写大括号,这依然还是C语言的遗毒。

这都2023了,也都是学的C++,能不能把一些遗老遗少的东西,收拾收拾扔掉?

///

所以,一共我预测了9条,里面关于C++非常糟糕的编码习惯的预测...

100%全中。

所以这就叫做名师。

这样,就不抽象了吧?

5- 名师的考前讲座!

因为赛季马上开始了,所以真心是没有太多时间一一照顾各位想要咨询的家长。

那么,考前的唯一的一次的小周老师考前讲座,就安排在:

7月5号北京时间晚上8点

具体细节,您得扫码联系我们的咨询老师。

就算您有我的微信,也别找我。

真的,我不负责咨询。

就算是我愿意跟大家结个善缘,也真心没有时间一一接待和解答问题。

如果有问题,就一起问,我一起答。

不见不散哟!

扫描二维码咨询信息学奥赛

(图片)

扫码关注小周老师的信息奥赛公众号

(图片)

点击链接进入有趣的解密

(https://www.luogu.com.cn/paste/lu8p1tji)