看板 ACMCLUB 關於我們 聯絡資訊
: 發信人: liulike (積累rp&&->100), 信區: ACM_ICPC : 標 題: 比賽經驗(zz) : 發信站: 四川大學藍色星空站 (Tue Sep 6 13:23:04 2005), 站內 : 標 題: 比賽經驗 : 發信站: 天大求實BBS (Sun Sep 4 21:08:12 2005), 本站(bbs.tju.edu.cn) 以下就我個人的經驗給一些補充, 或是不一樣的看法. : 在天大,偶參加的比賽可以算是最多的了,說說比賽經驗。 : 可能現在說早了點,需要大家在正式比賽之前再看一遍。 : 推薦此篇文章打印,與模板放在一起。 比賽可以攜帶紙本的參考資料, 除了大家常會準備的 code/algorithm 其實還可以準備一些實用的東西, 譬如 a. 各類數學公式 b. 做一份 check list, 譬如你若覺得他講得這篇文章有道理, 便可以印一份比賽 時 check what to do/not to do. 我知道以前有些隊會做 "十大死亡原因" 列一些平時寫程式或模擬賽做過的蠢 事, 提醒自己不要再犯. : 1. 比賽中評測會有些慢,偶爾還會碰到隔10分鐘以上才返回結果的情況,這段 : 時間不能等結果,必須開工其他題,如果WA,兩道題同時做。交完每道題都 : 要先打印。 在真實比賽中, submit 到收到結果這中間的空檔超過十分鐘是常有的事. 而 print code 到拿到結果要等多久更是難講. 因此無論有沒有把握, submit 後馬上 print 一份. 這樣要是 wrong answer, 便能直接在紙上作業而不需等待列印. (聽說某年台北賽區的作法, 我不知道是不是常態. 為求慎重, 除了電腦自動 verify, 還要印出一份 output 肉眼 double check. 導致 judge 速度緩慢. (這方法的另一個缺點是 test data 無法太大, 至少, output 不能太多)) : 2. 比賽時發的飯不是讓你當時就吃的,那是給你賽後吃的。基本上比賽中前幾 : 名的隊都沒人吃,除非領先很多。 我是覺得因人而異, 很餓就先吃吧. 不過比賽時間寶貴, 隨便吃點不會餓到不舒服 就好. 我知道有些同學說自備巧克力吃的效果不錯. 我自己則是忙起來就忘了吃, 也不會覺得餓. : 3. 很多選手,尤其是第一次參加比賽的,到一個新環境,全當旅游了,參觀的 : 參觀,找同學的找同學,玩玩樂樂就把正事拋到腦後了,結果比賽自然沒什 : 麼好成績,這樣的例子太多了。所以到參賽地後要時刻不忘自己是來比賽的 : ,好好休息、備戰。 : 4. 參賽前一天要睡10個小時以上,非常有助于保持比賽中的精力,很多時候比 : 賽到3個多小時隊員就沒勁了就是這個原因。前一天晚飯與當天早飯要吃好 : ,理由同上,要知道下頓飯得下午3點賽後才能吃。 : 5. 到新環境,時刻注意遠離疾病,感冒腸炎病不大,卻是成績的天敵。 : 6. 英語不好,看不懂的,要勤查詞典,懶一次就少一道題,遠離獎牌。 雖然說題目中的敘述每個字都不能輕忽, 不過我還是傾向用一般讀英文的方式, 看不懂先猜, 判斷一下這個字是不是關鍵, 有時某些字只是故事背景, 不懂沒關係 :P 好好善用隊友, 有不認識的字或查字典前, 先問隊友, 會比較省時間. : 7. 可以緊張,杜絕慌張,慌張是出題的敵人,任何時候,如果發現自己或者隊 : 友出現慌張的情況,提醒深呼吸。 : 8. 照著紙敲代碼和sample數據時不要敲錯,特別注意文字信息。 這很重要, 看過太多次這樣死掉的例子... : 9. 第一道簡單題交給隊中最穩的人做,萬一遇到麻煩也不要慌,如果有很多隊 : 都出了就更不必著急了,它必定是簡單題,必定是可以很快做出來的,晚幾 : 分鐘也比罰掉20分好。另外注意不要PE。 平時練習就應該養成習慣, 嚴格遵守題目的 output format, 就算 judge 宣稱他們 允許 format 的錯誤, 也不要去踩. 理由是, 誰能保證 judge 是不是完整考慮到你 的奇怪 format. 有些賽區對 format 問題是用程式看, 有的是人工判斷. 前者可能 rule 沒寫好, 後者可能 judge 看走眼. 反正完全照著題目的說法做, 最不會出問題. : 10. 最後一小時是出題高峰,誰松懈,誰落後。最後一小時出一道是正常,出兩 : 道更好。 時間剩下一小時到半小時, 就得衡量整隊的實力與當時的解題狀況等等因素, 決定放棄某些題目, 留下最有希望的幾題全力寫或除錯. 即使是最後幾分鐘也不應該有人閒著. 就是決定只衝刺一題, 沒上機的兩人還有很 多事可以忙, 譬如重讀題目, 想反例, 設計 test case, 或是多幾個腦袋幫忙看螢 幕上有沒有打錯什麼東西. 除非完全沒希望, 否則不應該有任何人 idle. : 以上各條均有出處,每條都包含著以往教訓,每條都可能浪費掉你一年的努力, : 不可小視。 : 以下各條有些來自于其他學校,有些是總結: : 11. 無論是否有人通過,所有題必須全讀過,最好每道題都有兩人以上讀過,盡 : 量杜絕講題現象。要完全弄清題意,正確的判斷出題目的難易,不要想當然。 這很重要. 全部的題目都要讀過, 一開始對於 input/output 細節可以不那麼注意, 至少要能 看出難度/可不可行. 可以跟隊友講解題意, 但是寫 code 的人一定要自己重頭到尾讀一次. 若第一個讀 題的人不是寫 code 的, 應該提示第二個人何處是重點或非重點. 讀題時順手把重 要的字句做上記號, 方便寫 code 時注意. 讀 input/output 或圖片, 也可以順便 作記號, 譬如第幾個數字是什麼變數, 或哪幾個是一組, 或標上座標/序號... : 12. 雖然討論有助于出題,但是以往每賽區第一名基本都是各自為戰,但是互相 : 了解,覺得一道題適合其他人做就轉手。 我想, 所謂 "各自為戰" 並非不管隊友死活, 而是因為第一名的隊伍的隊員實力都 還不錯. 重點應該是彼此了解, 了解各員的實力, 了解各員的解題狀況. 在解題時, 除了專心處理手上的題目之外, 記得分出一點點精神, 注意一下自己是 不是卡在一處一段時間或是遇到什麼麻煩正在用笨方法處理問題, 若是的話請隊友 幫忙一下. 同樣的, 隔一段時間就問一下隊友他在幹什麼, 是不是有需要協助之處. 我比賽多年, 成績還不差, 除了隊友很優秀之外, 我覺得隨時了解彼此的動態也是 很重要的因素. 跳出手上的題目, 注意一下 over all 的狀況, 注意一下三個人在 做些什麼, 注意還有多少題目沒讀過, 看一下是不是有簡單的題目放著沒人管, 或 是太多題目等著寫, 也偶爾(不要太常, 否則浪廢時間且容易心慌)注意其他隊伍的 出題速度與順序. : 13. 保持頭腦靈活,在正常方法不行時想想歪門邪道,比如換種不常見的特殊的 : 數據結構,加預處理,限時搜索等。效率是第一位的,如果覺得DP麻煩就用 : 記憶化搜索,總之考慮清楚後就要在最短時間出題。 他說的方法不一定都適用, 不過重點應該是頭尾幾句 "保持頭腦靈活", "總之考慮清楚後就要在最短時間出題" 在幾種方式都可行的情況下, 選好寫不易錯的方法. : 14. 競賽中更需要比平時穩定,程序出來後要檢查重點地方,盡量1Y。對于WA : 的題,不要改一處就交,很可能還有錯的地方,要穩,要懂得在壓力下也要 : 仔細。對 WA的題測試時要完整,必須每個點都測到,但不一定特別復雜。要 : 考慮到測試的各種邊界情況,比如矩陣可能為1*1或1*n或m*1。 : 15. 除非做出的人很多,否則最後考慮復雜幾何題,精度造成的問題太多了。對 : double型操作要小心判斷大小、絕對值等情況。一般情況下不要用float型。 : 16. 塊復制要小心,檢查相應的部分是否已經正確修改。 "塊復制" 應該是指 code copy/paste 除非避免 copy/paste 的代價高很多, 否則儘量少這麼做. 當然, 這代價得自己衡量. : 17. 紙上寫程序要盡量完整,每道題上機時間(包括輸入、測試和調試)不要超 : 過一小時。程序出錯如果一時無法排除就應該打印出來閱讀而把機器讓出來。 : 18. 提交時注意題號,不要交錯題。由于PC^2的界面,這種情況時有發生。 : 19. 盡可能想到題目可以用到的數學的東西。 : 20. 初始化必不可少。 : 21. 數組行列下標不要弄反,位運算或字符串哪頭是0和n不要搞反。 : 22. 提交時記得把所有的調試信息都關掉。 : 23. 實在迫不得已才可換人做題。 若還沒開始寫, 或剛開始寫但覺得不順, 此時可以當機立斷馬上換人. 若是寫完但一直錯, 則不鼓勵輕易換人重寫. 換人做有一定的 cost, 這 cost 跟難度成正比, 因為相當於另外寫一題. 因此原則上只有偏簡單的題目卻找不到錯誤原因才換人 : 24. 有想法後,寫程序之前想好時空效率。比賽中一般不會出現時限30秒以上的 : 題(國外賽區除外),10秒及以上的一般不會超過3道。 大多數的題目都是會寫或不會寫的差別, 或是 complexity 明顯可行不可行的差別. 需要斤斤計較的題目少見. IOI 對演算法的執行效率要求才比較高. : 25. 競賽機會每年只有一次,訓練了很長時間,如果比賽中出現疏失,那麼今後 : 一年都會後悔。對于不准備明年參賽的同學,更是要珍惜最後一次參賽機會。 : 附以前所寫《組隊賽說明》 : 1 要有做題比較多的隊員,對于各種題型都有所涉及,做題穩,一般對前兩道簡單 : 題能夠保證快速,並且99%以上一次AC。 能這樣是最好, 不過...我稍熟的同學好像幾乎沒人可以到 99% 那麼穩 XD : 2 要有人專門應付數學與幾何題,但復雜的幾何題要放在最後做,對一些常用的函 : 數要有模版准備。如精度控制,叉積,凸包等。 除非背得非常熟, 否則照著紙本 keyin 總是比用想的來得快與正確. : 3 要有人能夠對付麻煩的題,並保證一定的通過率,大多數的比賽都至少有一道這 : 樣的題,如 POJ 1913,TOJ 1092。 : 4 要有人對DP非常之熟,單次、雙次、相對等情況都不在話下。對經典DP手到擒來。 : 5 要有人對稀奇古怪的算法都做過程序,涉獵廣,對于數論、圖論中的一些特殊結 : 論都知道。如 TOJ 1584,ZOJ 1015,UVA 10733。 (這些題號我不清楚內容是什麼, 最近也沒時間看.) : 6 要有人對復雜的通用算法做過程序,如網絡流中的最小費用最大流等等一系列的 : 流,求割點/割邊,啟發式搜索/搏弈等。 若不論某些題目比較難的區賽賽區(譬如大陸和歐洲某些區), 我的經驗是這些比較進 階的演算法並不常出現, 特別是 world final, 題目有越來越簡單的趨勢. (題數上限放寬, 又不斷強調讓每隊都能解出幾題, 各題都有隊伍解出來, 這使得題 目難度受到限制, 改為題海戰術, 簡單或中等題目變多, 也不易出現超難題.) 就算有進階演算法的題目, 影響力也比以前小, 因為若實力不足, 寫到那題之前比賽 就結束了. 不然就是可以改寫其他題, 還有很多題目可以寫 :P 當然, 多一分準備就多一分勝算, 能弄懂並準備些進階的演算法是最好. 若要爭第一 這也有可能是關鍵. : 7 模版要自己寫,並且另兩個人都認真讀過,用以往題目進行多次的測試。模版要 : 全,但要控制篇幅,因為很多賽區已開始限制頁數。 我感覺台大同學最近幾年對紙本參考資料的準備沒前些年那麼用心. 雖然用到的機會並不高, 平均大概半題到一題吧. 但比賽中能賺到一題, 幫助就不小. : 8 要有人對 Linux/vi/gcc 系統熟悉,對PC^2熟悉,一定注意正式比賽時不要出現 : 提交錯題的情況。另外也要試用Dev-C++等Windows下的免費軟件。總之熟悉比賽 : 環境。 有些同學不習慣 unix-like 的寫程式環境, 要特別注意. : 9 每次練習賽都要當作正式比賽來做,要確保所有的題都看過,賽後要把沒做出來 : 的題盡量補上。 : 10 可能的話多看看以往比賽的總結、照片和錄象,縮短與正式競賽的距離,避免正 : 式競賽時緊張得做不出題等情況。 模擬賽除了拿從前的考古題做之外, 別忘了比對一下當時的 score board, 某些賽區甚至提供各隊的解題順序與時間, 在賽後檢討時也可以參考看看. 檢討是不是照著題目難度由易到難做題, 對題目難度的估計是否正確. : 最好的情況就是對于各種題目三個隊員都能做,但是又各有側重。 : 要保證出來一道題能夠有人會做、敢做,至少也要知道做法。 常看到建議每個人各有擅長的題目, 但通常的狀況是三個人都差不多沒有特別擅長 的項目. 這其實不難, 就一開始三個人各挑幾個領域, 然後從此練習時遇到該類型 的題目就丟給他做, 練習久了, 三個人各自對於某些類型的演算法便會特別熟. -- "聲音是聲音, icon 是 icon, 用 icon 來表示聲音的結果, 就是不知道哪個是聲音, 哪個是 icon. " 小光光 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.142.187