经过了这一个学期的acm课程的学习,我收获了很多的东西,并不仅仅是做题的水平提高了,还有很多其他的能力也跟着提高了。下面我就对我这一个学期以来acm的学习做一下总结。 先说说我通过acm的学习收获了什么。首先是我的英语水平提高了,以前我阅读英文的速度很慢,做英语的阅读理解应经常看不懂文章,有的时候会错很多的题。但经过了这个学期一大堆英文题目的训练,我现在可以只用较短的时间就弄明白这篇英语文章大概是什么的意思(这道题是什么意思),因此我现在做英语阅读理解比之前快了不少,同时正确率也翻了一番,这是我在最近复习英语的时候发现的。此外,我再学习c++的语法课时感觉也轻松了很多(毕竟语法的这些东西比算法简单多了),学的东西接受起来的也快了不少,我觉得这可能也是因为我写了很多的代码的原因,现在我确实是感觉在学c++的语法课程时非常的轻松,尽管现在的学的类与acm几乎没有什么联系。当然,最重要的还是我的思考能力提高了(做题水平比之前提高了,便是一个最直接的体现),还有就是我写代码的能力也提高了一些,最直接的体现就是写毕业设计的时候,我是比较顺利的写出来的,几乎没有遇上什么的大的困难,最后写出来的成品我自认为还是可以的。此外可能还有很多现在看来还不太明显,因此没有引起我注意的东西。让我们为了解决一个个的困难,而不断的努力,潜移默化的提高自己各方面的能力,这也许就是acm锻炼人的地方吧!这些就是我通过这一个学期acm的训练所收获到的东西吧。 以上是我这一个学期以来打acm的收获,下面再来说说我这个学期acm的经历。最开始接触算法,大概是在今年寒假acm队开始训练的时候。在刚开始做算法题时,我对算法其实也并没有太多的概念,学的这些东西也还没有形成一个完整的体系,所以那个时候做题感觉是真的很难。我记得最清楚的是递推和递归,那个时候心态都做崩了,根本想不出递推式是怎么出来的,对于某道题为什么要那么做、这个做法是怎么来的也丝毫没有头绪。(现在想想可能是因为我那时侯没学动态规划的原因吧)到了后面学的东西和做的题目也依旧很难,但我的算法体系也渐渐的补充完整了,对于题目也能进行简单的分析了,什么样的数据范围要采取什么措施什么方法(基本的时间复杂度分析),某道题答案的这种方法是怎么得出来的等等。并不像之前那样完全抓瞎了,当然,题目也比之前要难了,因此学起来也并没有比之前轻松。但不管怎么说还是坚持着走过来了。 到了学期的后半段,我就开始了打codeforces的经历了,这对我来说也是一段比较曲折和宝贵的经历。其实老师刚开始要求我们打codeforces的时候,我其实还并不是很愿意的,因为我不是很想熬夜。但是老师十分的看重这个,不断地强调它的重要性还请了我们大二cf分数较高的学长来给我们讲感想和方法,甚至把这个做为期末成绩的判定依据。我刚开始打codeforces还只是被迫的,但到了后来慢慢的也就变成自愿的了。(我也不知道是从什么时候开始转变的)刚开始打codeforces的比赛时我对自己的成绩还是比较满意的,因为我每次比赛都很稳定的能够出两个题,而那个时候很多的同学还只能出一个题。而且后来我也随着对于比赛和英文题面的逐渐熟悉,做题的速度也快了一些,div.2的比赛我正常情况下也能在半小时左右做出前两个题。但我的第三题始终都做不出来,即使是div.3甚至是div.4的比赛,第三题非常的简单我都会因为种种原因做不出来。慢慢的其他的同学都开始有了进步,每次比赛从只能出一个题到后来有时能出两三个题,但我还是在原地踏步。当然也并不完全是原地踏步,我每次打比赛时都感觉离做出第三题更近了一步,但就是做不出来,有的时候是审错了题目、有的时候是某一个点没有想到导致没做出来,总之就是做不出来。那一段时间我是挺郁闷的,第二天看题解的时候看一眼就明白了,感觉是很简单的,但就是做不出来。那个时候真是差点就放弃了,好在是坚持住了,终于在一次div.3的的比赛中一下子做出来了5个题,终于是有所突破了。但那个时候其实好像高兴也只是因为一下子做出了5个题,比之前多了不少而已,并没有什么做出难题时的兴奋和自豪,因为那次的题确实是很简单,感觉做不出来才是不应该的。不过也因为那次的比赛,我也受到的鼓舞,重拾了信心,到了现在,我div.2的比赛有时候也能做出三个题了,也算是有进步了。 下面我再总结一下我学习的一些方法。首先是基本的数据范围分析:当数据范围只有几十到几百的时候,一般是怎么折腾都不会超时的,可以用爆搜试一试。数据范围在一千以内的话,可以用时间复杂度为O(n3)以内的方法求解。数据范围在一万左右的,可以用时间复杂度为O(n2)以内的方法求解。当数据范围到了十万到一百万的时候,就只能用O(n)以内的方法了。数据范围的基本分析还是很重要的,通过这个可以大概确定要用什么样的方法来进行解题,这样能少走不少的弯路。第二点,就是在看题解的时候,不要只是弄明白别人做这道题时用的这种方法就完了,还要搞明白这种方法是怎么得出来的,遇到相同类型的题目时还要会分析能做出来才行。不要只是模模糊糊的弄明白就算了,怎么才算真的弄明白了呢?我的方法是写题解,看看能不能把这道题的思路方法完完整整的写出来,如果某个地方写不出来,那么就是说明这个地方我还没有完全的弄明白,那就要再下功夫才行。第三点就是要学会自己造反例,如果一个代码wa了,要能够根据自己代码的漏洞写出来一些反例来,再根据反例来完善自己的代码。这些反例当然不是凭空瞎猜出来的,要想通过瞎猜来找反例是很困难的。还是要根据写出来的代码造,想想有哪些情况是自己的代码没有考虑到的或者考虑的不完善的,再根据这些遗漏的情况来造出反例,最后根据反例来完善代码。找反例的意义应该就是在与:如果只是根据一个抽象的情况来思考是比较困难的,这时就可以通过这个抽象的情况来造一个具体的实例,这样能够帮助我们更好的思考问题,完善代码。 最后我再说说我想到的为什么要打codeforces比赛的原因把。我们都有两个圈,一个是理解力范围,在理解力范围之内的题目,我们可能还是不会做,但是可以很容易的看懂题解。另一个是实力范围,在这个范围内的题目就是我们可以做出来了。可能有些题目我们自己做的时候做不出来,但是一看题解就马上能明白这道题是怎么做出来的,就是因为这道题在我们的理解力范围内,却在实力范围之外。提高理解力范围的方法还是比较简单的,把不明白的东西弄明白就行了。一道题如果看不懂题解的话,那么如果能通过各种方法最终把这个题解弄明白了的话,那么就可以提高理解力范围。但是提高实力范围就比较困难了,当然理解力范围的扩大能够促使实力范围也扩大,但效果其实并不是那么好。现在我知道的方法就是打比赛了,而codeforces的比赛便是我们现在能够接触到的为数不多的比赛了。只有通过比赛,强迫自己把题做出来,才能够扩大自己的实力范围,同时通过补题,扩大自己的理解力范围,这样才能够让自己的实力得到快速的提高。这也就是我们打codeforces的比赛的意义。
一道题能不能做出来,其实就是看到题目时进行题目分析那十几分钟的事情。对于我来说,一道题如果看完题目没有一点思路,那么即使再花很长时间去想,那做出来的可能性也微乎其微了。做题就是把刚看到题目时想到的模糊的思路具体化实体化的过程,虽然看完题能不能有思路只是着十几分钟之内的事情,但是能得到这个思路的背后,却是我之前几十天甚至是几个月的努力所换来的结果。如果说做出一道题来是一个质变的话,那么之前的学习过程就是一个量变的积累,没有足够量变的积累,是很难形成质变的。我觉得我现在能够做出那些之前做不出来的题目,也就仅仅是因为我的“量”积累的足够多了的结果,而不是什么的突然的飞跃性进步。积累的足够多了,题也就自然而然的做出来了。仅此而已。
以上便是我对于我这个学期acm学习的总结。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算