1. 程式人生 > >一位ACMER的心得(轉自大牛)

一位ACMER的心得(轉自大牛)

**[轉] 一位ACMer過來人的心得
刻苦的訓練我打算最後稍微提一下。主要說後者:什麼是有效地訓練?
我想說下我的理解。
很多ACMer入門的時候,都被告知:要多做題,做個500多道就變牛了。其實,這既不是充分條件、也不會是必要條件。
我覺得一般情況下,對於我們普通學校的大學生,各方面能力的差距不會太大,在這種情況下,訓練和學習的方法尤為重要。
其實,500題僅僅是一個標誌,而且僅僅表示你做ACM-ICPC有一定的時間,
我們訓練的目的是什麼?我覺得有四點
1、提高程式設計能力
2、學習演算法,(讀書,讀論文,包括做一些題目驗證)
3、準備好面臨將到來的挑戰(熟悉題型,調整心態)
4、啟發思維。
這裡四個目的,從訓練的角度上,重要性逐次遞減;為什麼呢?
因為前面的因素是後面的基礎。而是後面的目的,想達成越為不易。我覺得前3者能保證你ac掉你能做的題,即使難題始終不會做,也可以ac掉中等偏難的題目。
而需要一定思維難度的題,要以前三者為基礎而且屬於訓練的後期,中期只能作為偶爾調節。當然,我思維也爛得要死,對這點沒什麼發言權,大家可以鄙視我。

我這裡想主要說下第2點。
對於演算法,我發現,很多我們這樣的弱校ACMer選手沒有側重好演算法的學習。
下面要講的幾點,可能都很老套,但我想以035對比我自己的例子給大家做說明。
<1>演算法學習是ACM比賽所要推廣或者要提倡的一個方面
記得曾經路過某人的blog, 上面說他作比賽的時候遇到了一個dijkstra,他沒做出來,然後評論到(大意):我才不會花時間去搞明白“這種”演算法。 “這種”也許有可能是指:沒什麼實用性,對吧,這樣我就不想評論了(又是有關科學和工程的討論)。但起碼有一點需要明確的:ACM-ICPC比賽時關於計 算機科學的比賽,電腦科學是演算法的科學,計算機演算法中dijkstra有著重要的實際和啟發意義,所以比賽一定要考。
你參加這個比賽,要拿獎, 就必須學習這種演算法。你也許覺得你智商很高,但ACM-ICPC比賽本身不是智力比賽,比賽就是要讓你去學習這些東西,所以,如果你不想學的話,我覺得也 沒有必要參加。說道這,可能偏題有點遠,但是希望以上的分析能得出這樣一個基礎結論:不想學好演算法,那沒有必要來比賽。
<2>用模板是不好的
現在很多我們弱校的ACM-ICPC選手比較依賴模板,說實話,我 也很依賴,但是我起碼知道一點,這樣是不對的,某種意義上說,這是你沒有把演算法學明白的一種表現。而且也嚴重影響編碼速度。在我見過的huicpc035 參加過的比賽中,他從來沒有看過模板,全部現場敲,有一次比賽有個圖強連通分量+縮點+染色+什麼的題去了,我在他們機房做,我則抄模板,結果總共敲了1 個半小時,而035明確演算法之後,啪啦啪啦,估計30多分鐘就敲完了。這裡順便八卦一下他:我和kevin以前去湖大集訓隊玩的時候,給他取了個外號—— 打字猛男(他應該還不知道)。因為他敲鍵盤的聲音特別大特別快,呵呵。
我覺得他敲程式碼的時間沒有浪費,某牛曾說:因為每次敲都有可能有不同的錯誤,所以不用模板是好習慣。我最開始學dancing link的的時候,自己敲出了程式碼,然後接下來的幾道題部分參考了以前的程式碼,後來基本上是直接copy。現在,當別人問我dancing link演算法或有關的題目的時候,我已經是一臉茫然。
所以,用模板是不好的,有時候由於某些原因可能你用了模板,但你起碼要知道這要做是不對的,並且有機會要改正。
<3>需要深入學習
像 ACRush、zzy、ahyangyi…等等國家隊的天才們,本身難以說我們與他們之間有什麼可比性。但是他們的學習方法應該還是值得借鑑的,他們 的學習方法當然我們得不到言傳身教,但是從他們在國家隊集訓的論文中和他們搞完ACM-ICPC以後的軌跡中,可以有所體現。那就是:深入學習。
其實這點我來講可能還是不夠有力,因為我這方面也很欠缺,我儘量說下我的想法。
首先,覺得ACMer學演算法不應停留在看看程式碼實現這個層面,在演算法思想上要有清醒的認識,在正確性分析上要也應該要有較好的邏輯。因為網上的程式碼 的實現上的一些細枝末節很可能掩蓋了演算法本身有的簡潔性、美感和思想。因而喪失了對演算法整體上的一些認識。還拿dijkstra演算法打比方,有些演算法不是 基於 dijskstra的直接建模,而是需要你修改這個演算法,這時你對演算法沒有真正理解的話,也就一籌莫展了。
我為什麼老說Dijkstra演算法,因為確實很多人都只知道用模板,而且模板還不好,在我看到的Dijkstra實現中,只有czyuan_acm的程式碼寫得好。不是說其他的不對,但確實是有問題,投機取巧了的。
所以,要閱讀論文和書籍,尤其與英文書籍,窺到它的本質。另一方面,只有這樣,你學的的東西才能在ACM-ICPC以外,給你一定的啟發——否則你會迅速忘掉它的。
據我所知,035起碼閱讀了幾十篇集訓隊論文,orzorzorz,而且切掉了例題。
<4>獨立思考
這點我也很慚愧,因為我也是缺乏獨立思考的。很多題我不會了就去搜解題報 告,所以反而我的搜資料能力變得特別強。035和許多大牛在這點上做的比我好多了,他們遇到題不會的時候,也不會很急於把題目做出來,可能每隔一段時間又 拿出來想一次,總有一天想通了,之後這一型別的題目基本上也就沒有什麼問題了。
而我恰恰比較“虛榮”,做到的題目不會不太願意想太久,就想盡量快些AC,於是急於看解題報告,這樣導致的一個問題就是有些重要的東西解題報告中沒 有提到,而我也沒去想就把他們忽略了,這樣,我還是不會做。我和035討論問題的時候,我不會一般就直接找他要程式碼,但是他不懂的時候,頂多問我大體的思 路,而絕對不會要程式碼的。
在去年ACM賽區尾聲的時候,我發現035做中難題的能力已經明顯超過我一個檔次。看他現在做的題目,已然是相當變態,幾乎是都100以下人ac, 這些題目我看了基本上沒什麼想法,更要命的時,解題報告也搜不到。035目前的狀態讓我想起一個人,不知道大家知道不:wangfangbob,他切bt 題的能力也是令人汗顏的。
<5>做有意義的題
1.是不要做水題,這裡的水題定義為:一眼就能看出做法,而且中途的實現可以預計沒有太多問題的題目。
2.是做能夠強化你最近學到的東西的題目
3.你不會但你應該會的題目。
這同時也是在說,某些沒太多代表性的題目可以少做,因為對比賽幫助不大。(當然我這個參加比賽的目的很功利,非功利主義者另當別論)剛才,我把我在poj上的號和他的號對比了下,他ac而我沒ac的基本上是難題,我ac他沒ac的一般是水題,看得我想哭,5555。
補充一點:ac的人多的並不一定代表著水題,有些幾千人ac的題目,在現場賽中ac的人很少,這樣的題目往往是有一定思維難度且編碼不難的好題,這種題目要認真做,某個學長說:經典的題目啊,只有那麼多,做一道,就少一道。
<6>估算好某種訓練所需要的時間
我覺得我學網路流就是一個例子,我在大概賽區賽之前2 個月開始學習網路流,1個月前開始學習費用流,但是對於我來講,這兩個月培養出來的網路流思維還是不夠(雖然也做了不少題),特別是,這種題目往往作為中 難的題目出現,不會讓你隨便水的,於是,北京賽區的那道網路流當時就沒有想出來——功利地說,學習網路流沒有得到好的效果。
所以,現在來看,當時其實我可以不搞網路流。如果要學一種比較有難度的東西,並且還必須把他搞好,應該較早地,全面地學習,必須長期的訓練以培養這種思維。打個比方,如果你微積分平時不學,僅僅考試前一週狂做題目,我覺得上90分是很困難的。
當然,這要根據個人情況而定,我的理解能力應該說是中等水平,如果牛的話應該可以更快地學好。
<7>有關訓練的度
我有時候通宵刷體,這裡我不知道huicpc035有沒有這個習慣,不過我通宵的時候沒見到他通宵。
我 覺得其實通宵刷體,或者太長時間地做題,還是不好的。我們為什麼會這樣有熱情的做題呢,因為我們有興趣;但是一個人的成功不僅僅依賴於興趣,還要依賴於自 控。這和打遊戲是一個道理,遊戲太有趣以至於我們常常通宵——ICPC題目也太有趣,所以有時候通宵。而且很多時候是,由於一道題AC不掉,所以賭氣一定 要搞定才睡覺,這樣一不小心,就通宵了。
其實我明白,通宵不一定效果好,這僅僅說明了你興趣很高漲而已。通宵往往會打亂你的時間安排,打亂你的生 物鍾,進而影響你短期或是中期的訓練計劃。而且,疲憊的狀態下做題,你往往只有ac題目的慾望,而完全喪失了ac題目的靈氣。所以,我建議,ACMer一 定要合理安排作息,能夠自控,這樣不僅僅對你做 ACM-ICPC有好處。
總之,有效訓練是很重要,只有通過有效的訓練你才能獲得你參加這個比賽應得的東西。
還有就是,除了035以外,另一個值得大家學習的就是richardxx——我也很佩服,我並不覺得他是天才,我覺得他以全方位的努力讓他自己變得優秀,大家看他的blog可以看到他的學習歷程。
最後要說下刻苦訓練這一點,這個我主要想說給我們學校的acm隊員:
客觀的說,我們學校很多名校落榜生(我相比而言是水進的)。確實都蠻聰 明的,但再聰明也比不上ACRush吧?人家可是SGU都切滿了!ACM不是智力測試,不是你什麼都不做就可以天上掉餡餅的。當然我不是說題目一定要做多 少多少道,但如果你覺得你可以一心二用,從概率上來講,你百分之九十地錯了,我是個工科生,我相信概率而非奇蹟。
我覺得035這方面也是值得我們學習的,我比較喜歡扯淡,有時候聊題目的時候也經常不小心就去扯其他話題去了,在學習的時候,035是堅決不多聊亂 七八糟的東西的,除了討論上QQ,平時據我觀察都是殘酷地訓練。現在回想起來,我有點後悔,QQ上和網上花掉的時間用來學習新的東西,也許結果會更好。

ACM-ICPC絕不是大學生活的全部,也不是搞演算法的全部,你大可以花時間去做其他研究,做專案,或者參加學生工作(我更欣賞那些對人生和職業有良好規劃的ACMer);但是,如果你搞ICPC的那段時間你不是全部投入,那的在ACM-ICPC生涯中,將只有後悔。
only strive for your goal , can you make your dream come true ?**

相關推薦

ACMER心得自大

**[轉] 一位ACMer過來人的心得 刻苦的訓練我打算最後稍微提一下。主要說後者:什麼是有效地訓練? 我想說下我的理解。 很多ACMer入門的時候,都被告知:要多做題,做個500多道就變牛了。其實,這既不是充分條件、也不會是必要條件。 我覺得一般情況下

Android sqlite應用詳解自大SCOTT)

上次我向大家介紹了SQLite的基本資訊和使用過程,相信朋友們對SQLite已經有所瞭解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite。 現在的主流移動裝置像Android、iPhone等都使用SQLite作為複雜資料的儲存引擎,在我們為移動裝置開發

ACMer過來人的心得

<7>有關訓練的度 我有時候通宵刷體,這裡我不知道huicpc035有沒有這個習慣,不過我通宵的時候沒見到他通宵。 我覺得其實通宵刷體,或者太長時間地做題,還是不好的。我們為什麼會這樣有熱情的做題呢,因為我們有興趣;但是一個人的成功不僅僅依賴於興趣,還要依賴於自控。這和打遊戲是一個道理,遊戲太有趣

“美工”對自己工作的描述自cocoachina

PS: 最為程式猿,我覺得吧,喊設計師為“美工”,就是方便,天天喊“視覺設計師”,我都起雞皮疙瘩。可能設計師自己覺得那樣叫有範兒?就像程式猿喜歡別人喊自己 高階工程師,高階架構師一樣。 不過摘此文的目的是為以後自己當老闆了,面試“美工”時做準備。這位設計師對產品的設計還蠻有

從vb系到JAVA的朋友在一個類中寫了一個類似VB中MSGBOX的方法

fin return gen interface man text string listener com //此方法放一個自定義的JAVA類中 public static boolean msgBoxPlus(Activity objPage, String strTi

軟體學院研究方向,對研究方向迷茫的同學一定要看據說是北大軟院前輩寫的

                軟體學院研究方向,對研究方向迷茫的同學一定要看(據說是一位北大軟院前輩寫的)理想與規劃(軟體需求分

類比電子技術的一點心得

一、模擬大神的幾點學習建議(教材) 我學習模電有一段時間了,向大家推薦幾本自認為的"寶典",談下自己使用它們的感受以及在學習模電過程中的體會,供後來者參考: 1. 拉扎維的《模擬CMOS積體電路設計》,我們研二模電課的教材,汪寧老師把這門課講得可圈可點。當時沒意識到

Spark-SparkSQL深入學習系列十自OopsOutOfMemory

  上週Spark1.2剛釋出,週末在家沒事,把這個特性給瞭解一下,順便分析下原始碼,看一看這個特性是如何設計及實現的。     /** Spark SQL原始碼分析系列文章*/ 一、Sources包核心     Spark SQL在Spark1.2中提供了Exte

zxing 二維碼大白邊步修復指南

轉自:開源中國 小灰灰Blog 釋出於 2017/04/03 12:10 二維碼邊距修復 使用zxing生成二維碼時, 某些場景下,即便指定 padding 引數為0,依然有很大的白邊,本篇博文主要分析產生這個的原因,以及如何修復這個問題

CentOS 6、7下pptp vpn鍵安裝指令碼

這個指令碼可以單獨使用,直接複製或下載執行即可,不用依賴安裝包的其它指令碼。 CentOS 6、7下pptp vpn一鍵安裝指令碼,安裝如下: 1. wget http://mirrors.linuxeye.com/scripts/vpn_centos.sh

MATLAB r2016a下安裝libsvm,64,windows的心得小白教程

因為要用到支援向量機(SVM),今天便動手安裝了libsvm(matlab)。看了很多大佬的分享,在這裡自己也總結了一下。給自己留一個資料,也希望可以幫助到大家,吸取我教訓,少走彎路,感謝閱讀。一,要下載libsvm      可直接下載  https://www.csie.

彙編常用指令對標誌的影響

指令的彙編格式及功能    根據條件碼的值轉移:49、JZ(JE) OPR        ZF=150、JNZ(JNE) OPR   ZF=051、JS OPR             SF=152、JNS OPR           SF=053、JO OPR             OF=154、JNO

股市鬼才操盤20年總結的20條投資心得

百分比 邏輯關系 通過 太多的 喜歡 交易所 最優 漲停 mil 1. 股票炒的就是前景、就是預期、就是想象力!逢低買入好股票,長線投資才是王道!真正的好股票絕不愁沒人炒作。不要炒無概念無前景的債券型股票。 2. 要永遠牢記:不要做還不錯的選擇,只做最優化的時機!不是最優

這個立冬,我線下面基了TMD高階專家,太逼了!

立冬剛過,迎面而來的是一股寒氣。天氣如此,市場亦是如此。昨天週五,和1個認識的技術專家老劉約飯,也算是線下面基,增進感情。每年我都要向比我高階的朋友討教。不由自主聊到了他的職場生涯。魚哥一直以為自己命途多舛,聽完他的經歷後,我甘拜下風。在技術這條職業路上,走的太順未必是件好事,我們一起聊到了碼農要進階,碼農要

畢業了,我的四年大學:平凡但不平庸寫給每想要認真學習的小夥伴

去年十月份的時候,我分享了一篇關於我三年大學的文章:[普普通通,我的三年大學](https://mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=2247486062&idx=1&sn=6e2876ebd2031bb8ea49170cca744

HTTP狀態碼大全自wiki

成對 節點 而是 沒有 redirect port multiple 許可 sta 1xx消息 這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。由於HTTP/1.0協議中沒有定義任何1xx狀態碼,所以除

RPG遊戲設計自Gameres

工作量 我們 初始化 共享 世人 生命 置疑 年輕 動作 目錄:   第一章 概述  第二章 場景  第三章 角色  第四章 道具  第五章 事件  第六章 對白  第七章 語音和音效  第八章 音樂  第九章 界面  第十章 規則  第十一章 命名第一章:概述RPG遊戲即

ubuntu中安裝meld工具-自sukhoi27smk

插件 edit ges -s election load nbsp 輸入 eight Ubuntu下文件/目錄對比的軟件Meld可能有很多用戶還不是很熟悉,下文就給大家介紹如何安裝Meld和移植到Gedit下。具體內容如下所述。 Meld允許用戶查看文件、目錄間的變化。很容

WinForm中,每隔段時間(參數)調用次函數使用定時器

pre tick break switch 時間 器) chan pri args 1      System.Windows.Forms.Timer setTimer; //定義一個定時器 2 int flg = 0;

建庫建表學習心得知識點誤點分析

.cn 分析 說明 log courses 應該 code 主健 字符類型 建庫建表知識點(下列舉例)、 建庫: CREATE DATABASE EduBase2017 ON (NAME=‘Datefile_1‘ ,FILEN