突破信息学竞赛的天花板
  • 板块灌水区
  • 楼主lbdontknow
  • 当前回复30
  • 已保存回复30
  • 发布时间2024/7/31 20:47
  • 上次更新2024/7/31 22:24:52
查看原帖
突破信息学竞赛的天花板
664908
lbdontknow楼主2024/7/31 20:47

十条秘籍
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++,能不能把一些遗老遗少的东西,收拾收拾扔掉?
在玩抽象,别喷。
原文

2024/7/31 20:47
加载中...