ACM滾粗總結

ACM有什么用


從功利的角度上說,ACM是有用的:可以算作競賽,拿到了獎可以加分;對于有著自己職業規劃的計算機(很多非計算機的)dalao來說,摘金奪銀進WF,是打開谷歌、百度、阿里等公式的好的一塊敲門磚。對于我這種大四還在打鐵的小垃圾來說,ACM教會了我什么?學到了什么?

提升自我的思維,ACM是很有用的:博弈論、數學思維,很多題目考察的是讀題能力和思維能力(比如CF的div2的ABC題,一般都不會涉及算法),思維是自己的,不要總是被各種框架所局限住。

提高分析能力和建模能力。如果說簡單思維題是銅牌銀牌題目的話,那么所謂的中檔題就是銀牌金牌題了。根據自己學過的算法和數據結構,根據題意,來對應上各種框架和模型,分析綜合能力是不可少的

提高英文的閱讀能力。說實在話,除了ACM和學校布置的作業和聽英文歌,到了大學真的沒有好好的學過幾分鐘英語。把英語當作一個可靠的工具,那必須每天堅持有接觸,每天去學習,把英語真正當作自己的愛好。尤其對于計算機專業的孩紙來說,英文是必不可少的。需要學習英文文檔所介紹的各種軟件也好,配置也好來完成自己的工作

如果是計算機專業的同學,ACM是還培養了這樣一種能力:debug!錯誤是程序員職業生涯浪費時間最多的一部分,不可避免的話,就需要程序員來好好的靜下來調整。ACM給的環境是在壓力下編程:別人放氣球,自己wrong answer的情況,逼著自己好好靜下心來做題。不要放棄是ACM賽場的最重要的原則,沒有之一。

ACM為什么沒用


我自己作為一個計算機行業的人,如果不是對ACM感興趣,其實ACM對我來說,是沒有什么用的。很簡單:算法和數據結構在寫項目之中基本用不到。在我目前對計算機行業的淺顯了解之中,需要并且真的需要ACM經歷的就兩個行當:算法工程師(主要是做大數據和云計算方面的,真正需要去做算法優化,從O(n^2)降到了O(nlogn)是有實際作用的),安全工作者(ACMer寫的代碼一般為了求快,都是只求自己懂的格式,變量名a,b,c這種太常見了,相當于自己加密混淆了源代碼,安全工作者需要從其中來找到某些安全問題,就像CF的Hack環節,自己出Hack數據去找別人程序的問題)其他行業,由于計算機的處理比較快了,我們考慮的大都是如何開發更快,更針對用戶,即:面向對象的編程。而python、ruby這些語言的出現,讓編程更適用于程序員的功能化。效率什么的,確實重要,但是程序員的第一步想的往往是先實現,先做出來個框架

ACMer的思維是:這個題我應該怎么樣以最優的方式去搞(如果時間不優會超時空間不優會爆炸)而且還要好實現(不然wa全場還是不知道哪兒錯了)如果在思維范圍外面的或者不好寫的,或者知道寫完之后肯定有bug,就肯定不會去做這個題的

搞開發和打ACM走的完全是兩條路子的吧,自我感覺是這樣,為什么覺得打了幾年ACM,什么還是沒學到。因為在工程角度來說,我一個框架都不會,一個語言都不會,學到的算法和數據結構在編程的時候都用不上,也不可能在實際運用之中寫一發網絡流求一個什么東西對吧

我們應該怎么看待ACM


我仍然堅持自己的那么一點:考試是為了分數,學習是為了興趣。任何一個東西都是有利有弊,選擇上了,不管打什么牌,學到了東西,玩得開心,有了樂趣,比什么都好。引用谷巨的一句話:打比賽不如交友

如何打ACM


可以回到總結的正題上了,作為一個功利的ACMer,我們想的是賽場上拿牌,平時多出題,減少錯誤的次數和時間,多學習是一部分,技巧和方法也是很重要的一部分

1.首先是認真讀題:題目中的每一個單詞,每一個樣例都要搞清楚是什么意思。不要覺得題目鋪墊的廢話多就省略幾段不看,很多題目坑點就是在讀題,在某個地方藏了一句有用的話,不看就GG

2.然后是認真分析樣例:像青島網絡流那個題,題意其實不是那么明白:相信有很多數學計算方法去算出那個0.5,但是到底哪一種思路和計算方式是題目中描述的,就必須好好讀題和分析樣例。其實1和2是讀題中的一個步驟:因為我們的惰性,是習慣滿足于第一印象的!!!第一印象!!!當你對題目大概看過之后,如果沒找到細節,自己YY找到了一種計算樣例的方法,而且恰好是對的,很有可能進入了出題者的陷阱,就會不斷的去找自己的代碼中有沒有bug!!!不管代碼中有沒有bug,都是不可能AC的!!!因為,你看錯題了。。。再次強調,讀題和樣例的重要性

3.怎么1A?與其不斷的查bug,debug,還不如一開始就1A(廢話誰不想1A)做題的第一個原則是:如果我有細節沒有想清楚我不寫,如果有邊界數據沒想好怎么處理我不寫(我自己是急性子從來沒按這個走過,但是逼著自己這樣還是有用的:道理很簡單,從全局考慮完畢之后再來考慮實現細節是很快的,尤其是DP!初始化+狀態轉移就是全過程代碼)

4.如果不幸錯了(這不是很正常)怎么debug!三個步驟:首先,再次看題意!看樣例!確定自己做的題目就是這個題目(沒有理解錯題意)然后,梳理自己的思維,是不是某個地方在實現的時候,偏離了自己的整體思路框架,而且運氣好,過了自己的樣例;第三步,如果是wa,那么一定要用數據說話,拿邊界數據大數據特殊數據來Hack自己,一般情況下,不要去質疑評測機器,肯定是自己的問題,靜下來分析

5.遇到模擬,數學,思維題目怎么辦?(江湖俗稱XJBG)的題目怎么辦?打表也好,猜測答案也好,從樣例中推規律也好,總之不要想著一下把答案看出來。拿博弈論來說,賽場上三個人對吧,哪怕兩個人真的來玩這個游戲,從小到大,基本能找到規律。對于模擬題(2016青島B題魔方題)目標一定要準確的追求1A:道理很簡單。如果不是1A:我擦,這么簡單的題我TM的哪兒錯了,然后瞎debug一發然后就會回來繼續提交,直到把自己心態打爆炸,要么wa到死,要么wa到過了但是罰時爆炸。與其這樣,不如一開始把所有的情況考慮清楚,哪怕考慮1個小時再寫,相信20分鐘之內肯定敲完了

送給所有ACMer:

ac everyday,at least today.

ac everyday,not only today.

Seize the day.

還有我kuangbin大神的:

ICPC欠所有ACMer一個world final

人一我百,人十我萬!追逐青春的夢想,懷著自信的心,永不放棄!?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容