1. 程式人生 > >2018中北大學ACM新生賽指南

2018中北大學ACM新生賽指南

比賽時間:2018-12-02

比賽賽制:ACM賽制(非3人隊形式,個人賽)

比賽時長:5小時

(中午是不會讓你去食堂的,餓的撐不住的童鞋可以自帶一塊巧克力啥的,當然你要是提前離開賽場也可以,不過這視為你比賽結束,友情提示:吃東西會讓血糖升高從而影響思維哦!)

題目數量:10題左右(一般為10題)

題目型別:主要以基礎數論、思維題為主

系統環境:WIN7 (正規比賽一般是ubuntu)

目前校OJ支援提交的程式語言:C、C++、Java

關於ACM賽制介紹

題目的提交狀態:

1、Accepted. ——通過!(AC)

2、Wrong Answer.——答案錯。(WA)

3、Runtime Error.——程式執行出錯,意外終止等。(RE)

4、Time Limit Exceeded. ——超時。程式沒在規定時間內出答案。(TLE)

5、Presentation Error. ——格式錯。程式沒按規定的格式輸出答案。(PE)

6、Memory Limit Exceeded. ——超記憶體。程式沒在規定空間內出答案。(MLE)

7、Compile Error. ——編譯錯。程式編譯不過。(CE)

!注意:每次提交錯誤是有懲罰的,每交錯一題罰時20分鐘

競賽結束後,參賽各隊以解出問題的多少進行排名,若解出問題數相同,按照總用時的長短排名。總用時為每個解決了的問題所用時間之和。一個解決了的問題所用的時間是競賽開始到提交被接受的時間加上該問題的罰時(每次提交通不過,罰時20分鐘)。沒有解決的問題不記時。例如:A、B兩隊都正確完成兩道題目,其中A隊提交這兩題的時間分別是比賽開始後1:00和2:45,B隊為1:20和2:00,但B隊有一題提交了2次。這樣A隊的總用時為1:00+2:45=3:45而B隊為1:20+2:00+0:20=3:40,所以B隊以總用時少而獲勝。

 

關於幾種錯誤的解決方案

Wrong Answer:有很多人問我已經通過了所有人家給出的樣例為什麼還會WA,這個...人家給出的測試資料只不過是所有測試資料的一小部分;WA其實是比較難解決的一個問題,尤其是在個人賽中,因為自己思維的錯誤是很難被自己發現和糾正的,當發現自己提交的題目WA時,先回讀題目,看自己是否誤解題意,或是少考慮了題目中給定的情況,然後審查自己的程式碼,檢查自己的程式碼結構,看是不是有的地方誤寫(比如:變數a寫成了b,或者>你寫成了>=),最後實在走投無路,修改無果,而你又不想放棄這道題,就給自己造資料,看你程式的輸出和你所造出的資料結果是否一致。

Runtime Error:產生RE的原因多半是因為你的陣列開小了,造成陣列越界;或是使用指標不當(所以在比賽裡多使用全域性變數,儘量少用指標)。

Time Limit Exceeded:產生TLE主要有兩大主要原因,在新生賽中因為不過分強調演算法,因此可能是你缺少迴圈終止條件造成無限迴圈,或是多組輸入時沒有結束標誌造成;在正式ACM比賽中,TLE的產生多半是因為用錯演算法或沒有優化時間複雜度造成的,而這些都是後話,大家先不用考慮這些。

Presentation Error:一旦產生PE說明這道題你基本上已經過了,但是可惜你的輸出格式沒有嚴格按照人家的要求,這就需要你仔細審查人家要求的輸出格式再修改你的程式碼。

Memory Limit Exceeded:一般是你陣列開的太大了

Compile Error:這個錯誤嘛...你每次交代嗎前在本地除錯好,交上去一般不會出現這個錯誤,不過還有一種情況,就是你所使用的變數名與庫函式名重名,比如:max、min、swap......這些都是庫函式,定義自己的變數時儘量不要起這些名字。

 

新生賽的賽前準備

1.可以攜帶書籍、自己列印的紙質資料,比賽時可以檢視這些資料,但是切記不能使用電子裝置,比賽期間不能瀏覽其他網站,一經發現直接取消比賽資格。

2.覺得機房的鍵盤不舒服可以攜帶自己的鍵盤

3.關於程式設計環境,機房統一配備dev c++和codeblocks,沒有vs,建議大家自己帶個U盤裡面放上自己變成的環境,賽前如有需要可以拷到電腦上

4.關於賽前環境除錯:這點上課老師應該都教過,先看看你的程式設計環境能不能輸出:“Hello World”Java選手賽前檢視虛擬機器是否可用,不要等到比賽開始了,你才發現你的程式設計環境有問題。

5.比賽前期會有熱身賽,熱身賽成績與正式比賽無關,做不做完全看你心情;等待之餘可以和身邊選手做簡單交流,以緩解場面尷尬(我自己想的),但是比賽期間嚴禁與周圍人交流。

 

關於“選題”

選擇那一道題目入手這很關鍵,因為如果你選擇了一道題開始做,除非這個題你做過或是這個題目很簡單,那麼這個題必然會花費你大量時間去編寫和除錯,所以下面教給大家幾點選題技巧和策略:

1.首先你要明確,題目的難度不是按照題號依次遞增的,也就是說第一題未必是簡單題,而最後一道題也未必是難題。

2.每道題目的提交次數和通過次數是會顯示給你的,根據這條資訊可以判斷出那些題容易做,那些題不容易做。

3.比賽剛開始的時候,你可以找一道自己“喜歡”的題目先開始入手(這裡的喜歡,要看你平時的做題習慣),要是有思路能做出來這最好,發現沒有思路,趕快去看別的題目,當連續幾次找題無果時可以看大家的提交記錄和題目的通過率來決定自己做那道題。

4.不要上來就死磕一道題,比如有人發現一道題自己WA了,改了幾次還是WA,於是他火了,別的題也不看了,就死剛這一道題目,這是很愚蠢的做法,因為很有可能這是一道“坑題”,而題目中的坑點一時半會你的思維過度不過去,這時你可以先去找找別的題看,先換換腦子。

5.還有希望大家明確一點就是:不要抱著去AK的心態去比賽(資訊學競賽(NOINOIP,ACM等)中獲得滿分(即AC了所有題目)的神犇,可以被描述為AK了某個比賽),比賽中肯定會有根本不屬於你當前實力範圍內的題目,有題做不出來很正常(因為出題人為了防止選手AK肯定會設定難題),所以大家只管放平心態去打,表現出自己最好的實力即可。

 

 

 

關於比賽時間

5個小時的比賽時間是什麼概念?相信大家是第一次體驗這麼長時間的比賽,5個小時對於你們來說十分充足,這和你們的高數考試不同,那個你們要考慮自己是否能答完卷子,這個5小時(因為存在你們無法涉獵的題目)對於你們很充足,但不代表不去珍惜時間,比賽時肯定會有一些選手會中途提前結束比賽,但是我不希望你們這樣做,我曉得讓大家在場上撐5個小時無論是對身體上還是心理上都是一種考驗,但是我覺得堅持到比賽的最後一刻是對這場比賽的尊重,這是我曾經的一個隊友告訴我的,當時我們在牛客打比賽,我覺得我已經過不了題了,就像提前放棄,他嚴肅的批評了我,如今他已經獲得銀牌光榮退役,希望大家秉承這種鍥而不捨的精神。

 

“氣球”

氣球在ACM比賽中是一件很神聖的東西,你每通過一道題目就會在你的桌前掛一枚氣球,這次新生賽也不例外,通過選手桌前的氣球數量你可以知道這個人當前過了幾個題。

 

榜單

點選排名可以看到自己和大家的過題數和排名,暫時的領先不代表最後的勝利,暫時的落後不代表最後的敗北,只要你鍥而不捨,直到比賽的最後一刻你仍有可能AC。

 

關於一些比賽注意和技巧

*提前把自己的模板、資料備齊

1.看清是多組輸入、單組輸入、還是輸入t組

2.字串輸入時gets要慎用,什麼時候用getchar(),什麼時候不用

3.明確資料範圍(int_max = 2147483647)見到以2開頭的10位數用long 或 long long

4.關於精度問題double

 

 

結束語

寫完這篇博的時候已經是1:19am,作為一個沒有什麼成就的菜逼心中不由浮現了一句話:“未了心願,但求心安”,不管怎麼樣,我把大家作為自己的一種寄託,希望大家幫我完成自己曾經沒有完成、沒有做好的事情,僅此而已,加油大資料ACM,加油中北ACM!

最後放幾張大佬照片膜拜一下orz!