今年暑假学校照例进行了ACM的暑假集训,跟以往不同的是:今年我作为一个老队员站上了讲台,体验了一把当老师的感觉,给新队员讲解ACM系列知识。
在集训开始之前,我跟一个同学写了一个ACM的评测系统,啊,评测系统?高达上啊。其实不然,这个系统也没有想象的那么复杂,只能简单地评测程序的几种状态:
Compile Error
Runtime Error
Time Limit Exceeded
Wrong Answer
Accepted
所写的评测系统,是一个线下的评测系统,即只能本地上交程序,然后评测,没有挂到网络上,不能通过网络提交程序,不像POJ那么高达上,但是还是能够正确地评判程序的运行状态。
所写的评测系统是基于Windowns环境,只能在Windows下执行,若要移植到Linux中我想也是很容易的,只需改改脚本而已,自从写了这个评测系统,突然发现脚本很重要。
既然聊到这个评测系统,就简单地说一下这个评测系统是怎么评测的吧。首先拿到提交的程序。然后尝试编译这个程序,若编译错误就会得到“Compile Error”并退出评测;若编译成功,就运行这个程序,读入提前写好的测试输入数据,然后让这个程序输出答案和运行时间,当然输入输出都是通过文件操作。若程序运行途中访问越界,栈溢出等会得到”Runtime Error“并退出评测,程序运行完之后,就启动评判程序,首先检查时间是否超时,若是则会得到“Time Limit Exceeded”并退出评测,否则检查答案是否正确,若发现某处答案跟标准答案不一致,则会得到“Wrong Answer”并退出评测,若答案完全一样则会得到“Accepted”。这其中涉及到一些Windowns脚本,即”.bat”程序的编写,这还是非常简单的事情,只需查查资料就能就编写简单的Windows脚本程序。
这个暑假的首要任务当然是给新ACMer讲解系统知识,ACM团队将ACM分为了两部分:1.完全新队员(就是刚刚新招募进来的)2.不完全新队员(进来一部分时间了)。更严格的来说还有一部分老队员,哈哈,很不幸我是老队员。我的任务呢是,偶尔会给完全新队员讲课,偶尔会给不完全新队员讲课。由于有部分的老队员,各老队员分工合作,各自负责一块知识,我们就将暑假需要讲课划分成几部分,我分到如下部分:
针对不完全新队员
图论:最小生成树,最短路
高级数据结构:字典树,线段树
常用技巧:尺取法,二分搜索
矩阵:矩阵乘法,矩阵快速幂,斐波拉契的矩阵
其他
针对完全新队员
快排
枚举
全排列
深搜DFS,广搜BFS
贪心
其他
还没有来得及讲解的部分:
处理技巧:快速读入、输出,离线处理
至于还有很多高深的内容:DP,平衡树,扩展欧几里德,离线处理等,有其他人负责,我倒是轻松,哈哈。
总体来说:讲课是按照先讲课数据结构,然后慢慢接触算法的路子。参照的书籍是《数据结构》-严蔚敏、吴伟明,《挑战程序设计竞赛》-巫泽俊译。
看起来任务不是很多,我也觉得任务很轻松,但是讲课还是蛮多事要做的:
1.提前备课
2.讲课
3.布置作业并自己也要去做
4.下次上课之前,还有讲解布置的作业
5.其他杂项
其实,如果你当天要讲课的话,基本上前前后后至少还是需要花掉一天的时间。毕竟我自己还得学习新的算法,去补充自己的知识库。
每周的集训生活是这样的:周一至周四该讲课就讲课该听课就听课,周五就利用所写的评测系统找相关题目练习并评讲,周六周天放羊自由安排。感觉还是蛮充实的。
总结一下自己暑假集训所得的收获:
首先给大家讲课还是会很多收获,以前不太明白的地方你在讲课之前肯定自己会去熟悉熟悉,不能说你肯定要完全掌握,但是你一定要非常清楚你要讲的东西一定是你自己很清楚的,这方面备课的时候对自己还是有很大提升的。在讲课的时候,你锻炼了自己的语言表达能力、沟通能力、勇气等。现在我讲课都不会心慌,哪怕下面座着习大大,我也丝毫不会紧张心慌。课后布置的题目你也会去做,去巩固自己讲的知识,有个明显的进步就是各大OJ AC题目多了一些,哈哈,这样说有一点功利吧,我觉得做学问不应该参杂功利在里面。
也跟着学习了一些算法:最大流,最小割,二分图,KMP,DP,扩展欧几里德,树状数组等。
常常在各大OJ做题目,有时是正式的网络比赛,如俄罗斯的Codeforces的比赛,杭电HDU的Bestcoder。最近在Codeforces上的状态非常不好,可能暑假集训有点累吧,有时明明很简单的问题会遇到坎,转换不过来,Rating连跌几次,跟当时的中国股市有着相同的规律,差点跌到生涯最低点。Bestcoder还好吧,都是老样子,没什么进步。集训中途遇到一个叫做”计蒜客”的一个比赛,服务器被爆了N次(抱歉的要找的页面去吃泡面去了),状态一样奇差,唉,伤心。
其他业余时间还学习了其他知识。跟着鸟哥学《鸟哥的Linux私房菜》系列丛书,不得不感叹鸟哥是个很诙谐幽默的作者,他将死板的知识用诙谐幽默的文字描述出来,我觉得非常有趣,我也很佩服鸟哥,算了我叫他鸟神吧。
在看《鸟哥的Linux私房菜》的同时我也在跟着网上一个叫“Nash_su”的老师学习他理解的Linux,我觉得他讲课虽然不诙谐幽默,但是讲课特别认真负责,条理清楚,特别感谢”Nash_su”老师。有兴趣的读者可以看看这视频,视频链接地址:http://study.163.com/course/courseMain.htm?courseId=232007
还学了什么呢?就是北京邮电大学崔毅东老师的《C++程序设计入门(下)》,这老师也是我见过最诙谐幽默的老师了,没有之一,他能将一个知识点描绘得非常幽默动听,感觉崔毅东老师一定是饱读诗书的人,上通古文,下通C++。他的《C++程序设计入门(下)》马上就要结课了,感觉时间过得很快,但是学到的东西倒挺多的,希望崔老师再出点其它课的公开课视频,让我们这些学子受益匪浅啊。有兴趣的读者可以看看这视频,视频链接地址:http://mooc.study.163.com/learn/BUPT-1000005002?tid=1000004006#/learn/announce
还学了一点中国科学技术大学华保健老师的《编译原理》,说实话这课没什么感觉,有一点点就是里面涉及到很多算法,什么广搜、深搜,有限状态自动机等,而这些算法恰恰是ACM中很多都学过的,我想也只有这个理由才能说明我学过这课之后没有什么感觉吧,偷笑。有兴趣的读者可以看看这视频,视频链接地址:http://mooc.study.163.com/learn/USTC-1000002001?tid=1000003000#/learn/announce
转眼为期六周的2015年暑期ACM集训就完了,假期还有十来天可以挥霍的时间,感觉时间过得很快,要学的东西还非常非常多,离我的目标还很远,但是有一点值得肯定的是:离我的目标近了一点。我想这是值得庆幸的。
在ACM这条道上坚持了1年多了,我一直坚信ACM是条正确的道路。
最后展望一下我校的ACM,先辈给我们铺路,后辈任在摸索不平的道路,但是有一点很肯定的地方:ACM慢慢地走上了正确的轨道,取得突破指日可待。
对了,忘了告诉读者我是来自*学院,至于是哪儿不必深究了吧,有什么可以交流的,希望在评论区交流,谢谢。
2015年8月,在此祭奠。
版权声明:本文为博主原创文章,未经博主允许不得转载。