acm學期總結

  經過了這一個學期的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學習的總結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章