为什么我们信息学奥赛出了国家一等奖 by:山东省莱州一中 姚 远
为什么我们信息学奥赛出了国家一等奖
2005年5月中旬,在犹豫了几个月后,我终于决定退出信息学奥赛。随后我交还了手中所有的图书资料,搬出了601宿舍,停下了所有的辅导课……脑袋空下来之后,过去的事开始不断闯进我的脑海——那不明白的许多事情,还有悬而未决的问题——我真想解决它们啊。至少我也要弄明白有些事为什么会发生,为什么会变成那样,而我错在什么地方。加之我的时间也不像过去那样紧张了,于是我开始慢慢整理过去。这期间,我明白了许多。
2005年11月,我还是参加了第十一届全国信息学奥林匹克联赛。不过参加这次比赛的目的并不是为了争取更好的成绩,我是想重温一下过去。在从日照回莱州的车上我开始写这篇文章《凭什么我们信息学奥赛先出国家一等奖》。之所以要写这么一篇文章原因有很多,主要三方面:一是基于对过去的反思和体会;二是参加了一段时间的另一科奥赛辅导使我横向比较认识到一些问题;三是看到莱州一中我和王福龙之后的几位oier(信息学奥赛参加者)的发展,纵向比较也让我深有感触。基于上面三个原因,我决定写这篇文章。
搞信息学奥赛要整日和数据打交道。我们喜欢“真实”,不喜欢“虚假”。我们只重视事实和真实的数据。因此在考虑该用什么方式呈现这篇文章时,我决定不讲空话。要让人信服,我只摆一些“数据”和“事实”。
一、时间
“时间”时衡量做功多少的一个常用的量化指标。就像天津市一位老师分析的那样:“要想取得国家一等奖至少要调够200小时的代码。”要想拿国家一等奖,首先必须投入大量的时间。我们的投入有多少呢?我们几乎挤出了所有可有占用的时间,多的时候每周活动30节。班会2节,体育2节,信息技术2节,活动2节,自理课2节,音美课1节,星期六晚自习4节,以及部分自习课,在比赛前夕,可能还会有更多的自习课被吃掉。而在校外,如寒暑假,我每天的学习时间平均超过12小时。这些时间加起来有多少?高一下学期,为有更充分的时间学习奥赛,我们将宿舍搬到了六楼值班室。这里我们可以不受学校作息时间的限制,我们可以在每晚10点熄灯铃后继续开灯学习。每晚我们会学多少时间呢?我不敢讲。但值班的老师和巡夜的警卫一定知道。
就是这样的时间投入使我们有可能触及国家一等奖。
一、书
开始学信息学奥赛时资料稀缺。那时想要找一本Pascal语言的书都很难。我看的第一本信息学奥赛的参考书时一本80年代的老书,纸都发黄了。即便是这样我仍感到非常难得,至今我还保留着那本书的笔记。上高中后为找书我们想尽了办法:邮购,托人捎,出去比赛时我们总要先搜一下当地的书店。所以一年下来我们还真积累了一笔不小的“富”。高一下学期我从601向办公室搬书,最下面的书在腰处,最上面的书到了下巴,这就是我们一年来读过的参考书,就这么多。
今年我曾让周恩朋整理了机房中现存的书。(见表1)这些本书共有19本,价值364.75元,按书后的印刷信息统计至少有676万字。而我们一个学期的所有教科书加起来也不过200万字吧。而且大家能感觉到读懂编程书上的10个字和读懂教科书上的10个字是不一样的。
上面的统计只是一个很保守的统计。那些现在在其他oier手中的书我无法统计到。至于计算机和网上的我们看过的论文、讲稿、解题报告、试题讨论和电子书我就更无法统计它们到底有多少了,只是从文件夹属性上我看到它们有500M。这些书籍资料加起来就是我们取得国家一等奖的知识基础。就是这些。
二、题
解一道信息学奥赛题和解一道物理或数学题是不可同年而语的。你若是知道3个小时的比赛时间只要求解决4道题,你就可以想象解决一道信息学奥赛题需要耗费多少时间和精力。从参加奥赛到现在我一共做了多少题,这无法计数。不过我觉得单数一下那几个比较大的题库中的题就不少了。我们做过几个比较经典的题库,如“”、历届联赛复赛试题、Poi(Poland Olympiad in Informatics)、TJU、USACO等。TJU是一个在线评测系统,是王福龙主攻的题库。这个题库共有200多道题,王福龙解决几乎所有问题。(因为TJU网站因故已停了近4个月,所以我查不到具体的数字,这是询问王福龙的结果。)参照3小时解决4道题你可以计算一下单做这个题库要用多少时间。USACO是我后半段时间主攻的题库,这是美国计算机协会(USA computer organization)专门为青少年信息学奥赛辅导而设立的题库,不用说这肯定是全英文的题库。读懂英文题,解决,提交,评测,你可以想象要花费多少时间。
济南培训52题
TJU试题界面
USAcO主页 看有6个中国人在线
我的程序通过测试的界面
还有学许许多多书上的,模拟赛上的,讲稿上的题目我无法统计有多少。不过我们可以从另一个角度评估一下我们做题的多少:离开新校前我拷贝了我机器上所有的程序代码,然后用计算机自动统计了我写的代码行数。得到的结果让我自己也吃了一惊,我在106微机上共写了27257行代码。而我曾看过的代码(包括别人写的)共有46239行。我想考过二级或学过写程序的人都会明白这两个数字的意味。写了这么多代码,我觉得我应该拿国家一等奖。
我的s106计算机
列了这么多数据,我觉得这只是“表面”而已,只是能看到的东西。这些只是我们为取得国家一等奖而付出的努力,而为什么我们能付出这种努力——为什么我们能挤出时间,为什么我们能看那么多书,为什么我们能做那么多题——内心深处的主观原因才是我们能拿国家一等奖的根本原因。那么这些内在的东西都有什么呢?我觉得至少有三大点:一、自觉和强大的自制力。二、激情和强烈的动机。三、能稍微吃点苦。
一、自觉和强大的自制力。
客观讲,自觉和自制并不是拿国家一等奖最重要的保证。但之所以将其放在第一位是因为这是最难做到的一点——特别是对于信息学奥赛的选手。
我觉得自觉应该包括两个方面:自觉做该做的事,自觉不做不该做的事。由于奥赛基本上是和日常课内学习脱节的,并不像课内学
那时我常去微机室,不少同学都问我在那里干什么。我说我在那里调程序。他们又问我你是否可以随时用电脑,可以上网?我说可以。这时他们总会偷笑着说“你们太幸福了……”我知道这句话是有言外之意的。在他们看来我们幸福是因为我们有条件做许多他们要想尽办法才能做的事,比如玩游戏,上QQ,看电影,看球……对我而言这真是太容易了,只要轻点两下鼠标一切都可以实现。可是我可以毫无愧色的说,我从来未在机房里做过那些事:我没有玩过一次游戏,一次也没有,哪怕是“扫雷”那种小游戏;虽然我经常上QQ,但我只是利用QQ
现在你或许能明白,我开始列的那些数据并不是虚构的“奇迹”,他们是靠自觉和自制从1+1开始积累起来的。垒到一定高度,自然会够到国家一等奖。
二、激情和强烈的动机。
许多人把我参加信息学奥赛的原因归结为一种兴趣、爱好。可我说这“苦差使”可真没什么兴趣或爱好可言,尤其在一中这种氛围下,尤其在一片反对声中。五年比赛,第3年才冲出莱州市,第4年才拿到国家一等奖,中间那么多失败和挫折,没有点激情没有强烈的动机,真的很难坚持这么久。我想这也是我们和其他科奥赛选手差别的地方。我们并不像他们只把奥赛当
三、能稍微吃点苦。
搞奥赛的那段时间里,我常拿出一篇文章来读。这篇文章就是我期末考试期间贴在墙上的那篇文章《人必须要有点精神》。文章讲的是中科院计算机所“龙芯”课题组的故事,讲中国第一块高性能cPU诞生的经过。文中有许多打动我的话,给我很大的激励。像下面这段:
有好几次,他在早上六、七点钟打开实验室的门,发现有些人手里扶着鼠标就靠在椅子上睡着了。这样的场景常常使他忍不住想落泪。但胡伟武还是叫醒伙伴们,询昨天晚上的进展,并鼓舞大家接着干——他开玩笑说,有时候觉得自己比“周扒皮”还狠。胡伟武有一个叫张福新的学生,在龙芯验证芯片出生前的两个月中,很少在凌晨4点前睡觉。有一次,他们在深夜等计算机的运行结果,聊天时说到了生死。张福新说最不希望老死,看着自己的生命一点点被耗尽。
还有胡伟武的一段话:
胡伟武动情地说,我们有一种观点,我们现在落后这么多,别人不比我们笨,如果大家都一样一周五天,一天8小时上班,恐怕很难赶上人家,惟有像当年搞“两弹一星”一样拼命,至少得累死一批人,中华民族才可能不受压制,才有可能实现民族的伟大复兴。
我感觉我还是从这篇文章中“稍微”学了点吃苦精神。之所以说我是“稍微”吃苦是因为我真不敢把我吃的这点苦和他们吃的苦相提并论。但我却不是一点都未付出,就像前面说的,高一一学年我几乎停掉了所有体育、活动、自理课,这些其他同学最幸福和期盼的课却不属于我。记得高一下学期停下奥赛辅导后,我第一次上了一节自理课——那也是那个学期最后一节自理课了。回到宿舍我躺在床上看外面刚下过雨的白蒙蒙的天空,我感到了一种很大的幸福——对比那些在计算机前抓着头发冥思苦想的“自理课”,对比那些眼睛被电磁辐射烤的干涩的“自理课”,我真的感到很幸福,这样简单的幸福,能在自理课回宿舍躺躺的幸福。
还有一点,我想班上的同学也会有印象。那时我和王福龙的晚饭经常只是一碗方便面。当时下午第四节我们常在机房,晚自习第一节又常有副课自习。遇到这种情况我们常常不去餐厅吃饭,一直靠到六点半再到科技楼下的商店买方便面,在办公室泡开。就是等面泡开的这段时间我们仍要抓紧时间做题,或咬着叉子讨论问题(王福龙的这个形象给我留下了很深的印象)。有几次讨论太投入忘了那边还泡着面,等到想起来时面已经烂的可以了。我在家中本来已经养成了吃完饭半个小时内不做任何运动或学习的习惯,但在那时也只能打破了。吃完饭我只能听一首歌当作休息或做一些整理文件夹这样的相对不太用脑的事,这就算休息了。有时我们调程序实在到了关键时候,往往连面也不去买了。一直要等到下第一节课我们赶回教学楼上第二节课再顺路买一碗面、泡上,下第二节课课间再解决掉。那
那时教室里经常弥漫着一股方便面的味道,真对不起我的同学们。
还有那段601岁月,还有那段早上4点半起床补课的岁月……想到这些我才敢说我们确实“稍微”吃了点苦。一点苦也不吃,没人能拿到国家一等奖,就是这样!
从科技楼到教学楼的这条路,不知“跑”了多少遍
讲到这里,讲了这么多,实际只讲了一个方面:我们自己的一方面。还有另外一方面:没有她我们一定拿不到国家一等奖;有了她我们一定能拿到国家一等奖。她就是我们最敬爱的辅导老师——
认识
就先说师德和敬业。
有一件事,在我脑海中留有极深的印象。每当想起时我总感动的忍不住想流泪。但我从未向任何人说起,就让我借此机会讲讲吧。在学图论时,有一个问题是“最小树形图”。这是一个近年才被计算机界解决的难题,我在书中看到后一直想弄明白。自己钻研了一个周后没有结果我又在网上求救,得到的回答是“连国家队金牌第三名的选手也不会”。
这是一件我记忆最深的事。还有许许多多的小事和细节我无法一一回忆。但我可以回忆到所有这些事给我的整体感觉,是感激;还有,不知如何回报。
而
在协调关系
我真的很感激
放在全国来看,
我们
文章写到这里,我已基本上讲完了我们信息学奥赛先出国家一等奖的主要原因。我不想再在这里做什么概括总结升华提高了。那是写华而不实的东西。从那些数字中,从那些小事上,大家不妨只凭“心”去感受一下,从细节处感受一下(不是说细节决定成败吗?):我们为什么拿国家一等奖。这是偶然?必然?
其实写这篇文章的目的并不是要争取什么改变什么,并不是要感动谁影响谁,我只是带着一中使命感,像司马迁那样,还原历史的真实,揭示不为人知的真实。为我自己,为
说心里话我觉得我们信息学奥赛一直处于一种和其他奥赛不同的很微妙的境地。有人常把我们从事的比赛说成是“计算机比赛”甚至是“玩电脑”。因为我们整日和计算机打交道,而电脑能干什么呢?打字、做网页、做课件、玩游戏、上网……人们觉得电脑中有些东西真难,比如系统设置,DOS命令,处理病毒,还有打字快一点……所以人们常想我们学的其实就是那些“难事”吧。其实不然,信息学奥赛就是信息学奥赛,信息学奥赛的主要任务是建立模型解决问题,知识核心是数据结构和算法,实现方式是计算机程序,而电脑只是一种工具。为了让学弟学妹们了解他们的水平我曾做了一份完整的“信息学奥赛知识能力体系”。如果有兴趣大家不妨看一看,了解一下信息学奥赛。这样也许更能理解我们要有怎样的付出才能取得成绩。
信息学奥赛知识能力体系
数学离散数学 集合论关系 代数系统 数理逻辑 图论
组合数学排列组合 母函数 群论 递推与递归
数学规划线性 动态 整数
高等数学向量 行列式与矩阵 微积分初步
概率统计
初等数论素数 整数理论 同余与模线性方程
计算几何
数据结构存储结构线性表
(一级结构)静态:数组 栈 队列 广义表 字符串
动态:指针 链表 动态数组
树
(二级结构)表示法(静态、动态) 二叉树 森林
图
(三级结构)表示法(矩阵、邻接表、三元组)
特殊结构散列表(HASH表) 并查集 线段树 后缀树 哈夫曼树与哈夫曼编码 地址表 Bit图 滚动数组 棋盘图 边顶置换图 二分点图(网络流)
常用方法遍历树 图 前/中/后序优先
转化拓扑排序(三级结构转一级结构) 最小生成树 最小树形图(三级结构转二级结构) 逆遍历
压缩路径树的线索化
压缩存储
查找线性直接 折半 Fab
树形二叉查找树 平衡二叉树B+树 B-树 线索二叉树索引表
排序插入排序直接排序、折半排序、2-路排序
交换排序冒泡排序 快速排序 归并排序
堆排序
基数排序链式基数排序 桶排序
代码素养代码的编写速度和准确性 误码率
算法实现
算法优化
调试 查错 测试
习惯变量名 注释 缩进 模块化
基本算法数学高精度计算(模拟计算)
表达式处理括号 前/中/后缀表达式 表达式树
排列组合求值 嵌套控制
高斯消元法
筛选素数素数表
分数处理
基本操作实现大量数据赋值与移动Fillchar fillword move等函数
处理实数比较大小 高精度
字符串处理基本函数 KMP算法
图论
(显示图搜索)路径问题
(边集)连通性测试传递闭包算法 极大强连通子图 最小点基
最短路问题标号法 第k小路 减半最短路Dijkstra算法 floyd算法 bellman-ford算法 Warshall算法
特殊路径欧拉路及回路 哈密尔顿路及回路
图的中心和重心
生成树Kruskal算法 Prim算法
集
(顶点集)覆盖集
独立集
支配集
割顶和块
网络流容量有上下界的网络最大 / 小流
容量有上下界的网络最小费用最大 / 小流
顶容量网络最大流
供求约束可行流
二分图匹配匈牙利算法
关键路径
搜索
(隐式图搜索)深度优先搜索
(回溯法)剪枝优化
预处理
记忆化搜索
可变下界的深度优先搜索
随机化搜索
广度优先搜索双向广搜 *多向广搜
启发式搜索(A算法)
分枝定界
多阶段决策贪心算法
动态规划
其他构造法穷举
模拟
在联合国教科文组织的五大经典奥赛中,信息学奥赛其实是最难的,尤其是你想达到高层次。你只要想想大学软件专业的分数线你就可以想想一个好的程序员需要怎样的层次。可是许多人还是认为“计算机比赛”是件很轻松很有趣的事。在一些老师同学我还是一个贪玩不爱学习的孩子。每次新老师接触我时总说:“听以前老师的评价你是个很聪明的学生……”可是我妈妈不这样认为,她知道我的“聪明”来自什么。我知道自己到底做了多少。
我还记得我被告知拿到国家一等奖时的情景。那是2004年的圣诞前夜,我们正在进行月考。吃完饭回来班主
我就是这样拿到国家一等奖的。这就是我们信息学奥赛先出国家一等奖的原因。
最后我想对过去两年内所有帮助过我的人道一声 谢谢。
还有对我带去麻烦的人说一声 对不起 原谅我吧。
第七届全国信息学奥林匹克联赛 (NoiP2001) 初赛 2001年10月 莱州
全市第3名 前2名有资格参加烟台加试赛
第八届全国信息学奥林匹克联赛 (NoiP2002) 初赛 2002年10月 莱州
全市第2名 第1名有资格参加烟台加试赛
第九届全国信息学奥林匹克联赛 (NoiP2003)初赛 2003年10月 莱州
全市第1名 差点因为父亲的反对没去成
第九届全国信息学奥林匹克联赛 (NoiP2003)加试赛 2003年10月 烟台
终于冲出了莱州 激动不已
“
NoiP2004夏令营 2004年8月 烟台
15天时间 系统学习了算法 认识了一大堆oier 拉了一次肚子 住了次院
第十届全国信息学奥林匹克联赛 (NoiP2004)加试赛 2004年10月 烟台
看到题目时我乐坏了——4道题我都做过。成绩出来后我大惊失色,只有20分。烟台那边的解释时:文件丢失,只找到我的一个程序。
什么事都让我遇上了 不过,我还是被允许参加复赛
第十届全国信息学奥林匹克联赛 (NoiP2004)复赛 2004年11月 潍坊
去了趟“风筝之乡”我还真带回了件风筝,一件不有特殊意义的风筝
就是在这届复赛,我拿到了国家一等奖
Noi2004全国信息学奥林匹克竞赛 山东省省队选拔赛 2005年5月 济南
6天时间 3场比赛 300页讲义 还有济南的夜景 还有老朋友相聚
第十一届全国信息学奥林匹克联赛 (NoiP2005)2005年11月 日照
我的告别赛 这次比赛结束后我正式退役
这是第十届联赛主办方赠送的日历,我在上面写着倒计时 我一直是数着日子走过来的
再附:文章中提到的<人必须要有点精神>
人必须要有点精神
“犯强汉者,虽远必诛”。背后是骏马、雄狮,一幅威武的西征军队图。胡伟武把这幅图画放在自己的便携式电脑的屏幕保护程序上。“有人说中国人做不出自己的芯片。我就不信那个邪。我常常跟我的学生讲,国家是每个人的国家,每个人都有责任为国家的发展出力。国家发展好了,你的日子自然好过了。我经常出国,在印度这样的国家我每天靠56美元的补贴能过得非常舒服,而在美国,每天补贴84美元却过得很拮据——国力强弱对比关系到每个人。”有趣的是,李国杰也非常强调对国家、对民族的责任感,他认为衡量一个科研人员的水平高低,不仅应当看他的技术实力,还要看他是否具有将个人价值融入为祖国繁荣富强而奋斗的责任感,是否具有自立于世界民族之林的自信心。李国杰回忆起当年他领导研制曙光计算机的岁月,深有感触地说,要做成任何事业,最不可少的是激情。回国后,国家给我个任务,研制出自己的高智能计算机。有人对我的能力也表示怀疑,说李国杰在国外只会写点文章,从来没有做过机器,他能搞出什么来!就是在那样的背景下,我拉了一个队伍,埋头苦干,分析计算机的核心操作系统,最终把它搞明白了。
现在,“人生能有几回搏”被贴在龙芯实验室的墙上。胡伟武说,15个月来,课题组的成员付出了难以想象的艰辛,尤其是在验证芯片几次调试的阶段。好多人都有调试程序的经验,但很少有人调试过操作系统,而在一个本身就可能出错的处理器上调试过操作系统的人更少——挑战就在这里,当出现一个错误时,应用程序、操作系统以及处理器本身都是怀疑的对象,需要多方面的协调及分析。我们曾经在c模拟器、verilog模拟环境、以及fpga验证系统上分别都运行了linux操作系统,每次都是连续几天几夜的鏖战。2001年8月19日,胡伟武他们设计的龙芯成功地把linux操作系统boot起来。当“login”的(用户登录)提示符出现在屏幕上时,计算所北楼309房间一片欢呼。
另外 这篇文章中还有一段话我很喜欢:
回顾这些如珍珠般闪亮的岁月,胡伟武说充满了艰辛,但其中的乐趣以及成功的兴奋,也使得一切的辛劳变得可爱起来。有好几次,他在早上六、七点钟打开实验室的门,发现有些人手里扶着鼠标就靠在椅子上睡着了。这样的场景常常使他忍不住想落泪。但胡伟武还是叫醒伙伴们,询昨天晚上的进展,并鼓舞大家接着干——他开玩笑说,有时候觉得自己比“周扒皮”还狠。胡伟武有一个叫张福新的学生,在龙芯验证芯片出生前的两个月中,很少在凌晨4点前睡觉。有一次,他们在深夜等计算机的运行结果,聊天时说到了生死。张福新说最不希望老死,看着自己的生命一点点被耗尽。
胡伟武动情地说,我们有一种观点,我们现在落后这么多,别人不比我们笨,如果大家都一样一周五天,一天8小时上班,恐怕很难赶上人家,惟有像当年搞“两弹一星”一样拼命,至少得累死一批人,中华民族才可能不受压制,才有可能实现民族的伟大复兴。