002. 這就是ACM?
200人的校賽大群里消息如潮水般翻湧,各種問題層出不窮:
「什麼是ACM?」
「為啥一會兒叫ACM,一會兒叫ICPC?」
「校賽是開卷還是閉卷?」
「啥是模板?」
「用啥語言啊?Java可以嗎?」
「兩個人可以參賽嗎?」
「用什麼編譯器?」
「啥是封榜?」
「電腦里的計算器可以用嗎?」
「比賽機器有VC6.0嗎?」
……
郭曉川滑動著聊天記錄,不禁感嘆有這麼多自己從未想過的問題。
群名片為尹南巍的管理員始終耐心解答,裴羅遠、趙不易等幾位管理員也不時加入討論,講解著一些令人似懂非懂的算法概念。海量的信息在聊天窗口中蹦出,郭曉川只感覺比剛過去的半年大一學的東西都多。
忽然一個新的消息閃動打斷了他的思緒——他被拉進了一個三人討論組。
「咱們學校的湘和醫學院,生醫工的陳小燕同學,川兒你見過的,去年班級聯誼包餃子」,彭峰介紹道,「這是我室友,數學王子郭曉川。」
郭曉川立刻記起了年前那場班級聯誼活動。
南北差異顯著,兩個班四十多人參與,會包餃子的人卻寥寥無幾。作為北方人,郭曉川雖會包餃子,但擀皮並不熟練,卻不得不承擔了從擀皮到包制再到煮製的全套教學。令他驚訝的是,彭峰作為郴城娃,竟能包出形狀規整的餃子,讓他刮目相看。
聯誼班級的陳小燕,即便裹在臃腫的羽絨服里,清秀的面容和靈動的眼神依然引人注目。她專注觀察每個步驟,不到一小時就掌握了主要技巧,主動接替了和面擀皮的工作。最終,大家吃上了少量形態標準、多數形狀各異的餃子。
陳小燕學習時的專注神態和利落的動手能力,給郭曉川留下了深刻印象。
還沒等他回復,彭峰又發來消息:「她上學期已經給專業課寫了幾個數據處理程序,是能用的程序啊!恐怕是咱們隊的代碼擔當了。」
「不敢當不敢當,沒打過比賽,今天才開始看規則」,陳小燕發來了消息。
「數學靠你了川兒,需要啥我搞定,首先薄荷味兒益達管夠」。
郭曉川趕緊敲出「幸會幸會」,外加兩個加油的 QQ表情,一時也不知道該說些什麼。
「報名表看下沒問題我就發郵件了!」
「沒問題[調皮]」
「好」
緊接著彭峰的私聊窗口亮了起來:「明天有空不,去湘和醫學院碰個頭。」
「星城有多大,雲麓就有多大」這話委實不虛,從校本部門口出發,公交坐了好一陣子才到湘和新校區。
「陳小燕在上課,我們先逛逛等她。」彭峰提議道。
湘和實驗樓的一樓看起來是個展廳,有許多人體解剖圖、動靜脈血管系統建模,還有一具用釘子連接起來的完整人體骨架。
「你知道嗎,這裡其實有個地下室,裡面存屍體的,他們稱為『大體老師』。」彭峰神神秘秘地壓低聲音,「但是一樓下不去,得坐電梯到頂層,然後從另一個專用電梯下去。」
他湊近郭曉川,繼續說道:「大體老師都泡在地板下面的福馬林里,有個機關可以一下子拉起來,以前有一群學生偷偷進去誤觸機關,嚇得四散奔逃。門又出了故障出不去,嚇了半死,最後還是老師打開了通往一樓的捲簾門才出去的。」
彭峰眯了下眼睛:「想不想去看看?」
郭曉川感到背後一陣涼意,原來是一個通風口。
「來給我拍一張,我要做校內網頭像」,彭峰說著就拉起了人體骨架的手。
忽然手機響了起來,彭峰接起電話說:「哦,好,我們這就過來。」
湘和的食堂和南校的七八食堂沒有太大不同,菜式也很相似。郭曉川和彭峰打了菜找到桌子坐下,就看見陳小燕邁著輕快的步伐走了過來。齊耳短髮隨著走路的動作輕輕晃動,身上大紅色連帽衛衣格外亮眼。
「剛下課就跑過來了,久等啦」,陳小燕放下帆布書包拉開椅子坐下。
郭曉川打開了筆記本電腦。「我只做過十幾個題,大致介紹下。」
開始為這個臨時搭建的草台班子解釋起比賽規則,「比賽可以用 C或 C++,在一個叫做 Online Judge的系統上做題,簡稱 OJ。系統用電腦的瀏覽器訪問,登錄比賽的帳號後就能看到題目了。」
郭曉川打開了一道POJ的題目,指著屏幕解釋道:「題大概長這樣,首先是一些背景與要求的描述。舉個最簡單的例子,『給a和b兩個數,求兩數之和』,題目會給一系列輸入數據,將數據處理後按要求輸出結果。所以題目描述中會具體說明輸入數據的格式以及輸出數據的格式,另外會給一兩組輸入輸出的例子。」
他指著題目的樣例繼續說:
「比如這裡給出了樣例:
```
1 2
```
輸出的樣例是
```
3
```
就是要寫一個程序接受輸入,並計算`1+2`的結果`3`
OJ對格式的要求很嚴格,輸入輸出的順序,哪裡多個空格少個空格,都可能導致無法通過。」
郭曉川翻到了「評測狀態」頁,「除了出錯外,還有超時、超內存等一些其他狀態,只有「Accepted」表示通過題目,其他狀態都不行。」
「比賽的排名依據是通過題目的個數和一個叫『罰時』的小分,罰時和過題的時間、錯誤次數有關,具體規則暫時就先不管了,系統會自動計算。」
突然一個餐盤砸在三人旁的空位,湯汁濺在郭曉川的筆記本上。
「罰時規則都沒搞明白還想去參賽?」
一個中等偏瘦的男生出現在旁邊,輕微駝背,短髮亂糟糟貼在額前,一副黑框眼鏡,深色T恤洗的有些褪色,搭配著一條磨白牛仔褲,整個人散發著技術宅的氣息。
「你又不是湘和的,怎麼每周都來?」陳小燕抽出紙巾幫郭曉川擦著筆記本,抬頭問道。
郭曉川收了筆記本,肖樂直接坐下,回道:「來向陳大神請教鹼基序列匹配算法啊」,他掃了眼郭曉川和彭峰,語氣裡帶著優越感:「聽不懂吧?」
「你說的啥,我也聽不懂。」陳小燕接道。
「原來是肖神,看來這次校賽一等獎勢在必得了。我們就是去玩玩,肖神多多指點」,彭峰接過話頭。
肖樂臉上的不屑少了些,但還是帶著掩飾不住的傲嬌:「罰時的基本計算就是把每道題通過時,距離比賽開始的時間加起來,所謂『罰』就是錯一次加罰20分鐘,通過題數相同的隊伍,罰時越少排名越靠前,就這麼簡單,這都搞不明白。」
「還是肖神厲害,三言兩語就講明白了」,彭峰奉承道。
肖樂面露得意,氣氛稍微緩和了些。「那要是罰時也一樣呢?」陳小燕抬頭追問。
「這...概率很小了」,肖樂頓了一下,看起來也不太清楚答案,說的略有吞吐,「有的比賽就當並列了,有的會再考慮誰先解出自己的最後一題。」說完他期待地看向陳小燕,等著她的誇讚。
「哦,那就是每道題花的時間不變的情況下,先做花時間短的題,罰時就更少」,郭曉川突然若有所思地開口。
「那才不是」,肖樂幾乎是本能地反駁,但話說到一半又停住,「哎?好像還真是。」
「啥意思川兒?沒懂。」彭峰一臉疑惑。
「比如解決三個題需要花費的時間分別是 10、20、30分鐘」,肖樂搶過話頭,「按順序做就是第 10分鐘做出第一題,第 10+20=30分鐘做出第二題,第 30+30=60分鐘做出第三題,假設都一次通過,罰時就是 10+30+60=100分鐘。但如果倒過來,第三題在第 30分鐘做出來,第二題在 30+20=50分鐘做出來,第一題在 50+10=60分鐘做出來,雖然都是在第 60分鐘解決了三道題,但罰時就成了 30+50+60=140分鐘,罰時比按從簡到難做多了 40分鐘。」
「哦~~」彭峰和陳小燕異口同聲。
「我吃完了,你們繼續」,肖樂端起餐盤起身,走到兩步突然回頭,對著郭曉川和彭峰擺出「I'm watching you」的手勢,陳小燕察覺到兩人的異樣回頭望去時,他立刻轉身,裝作什麼都沒有發生,向餐盤迴收台走去。
陳小燕看著他的背影納悶道:「你們叫他大神?他哪裡神了?」
「他把校內網當技術博客,大一之前就在寫技術文章,隨便做個貪吃蛇小遊戲都是灑灑水了。」彭峰迴道。
兩周後校賽如期而至,校本部的信息樓四樓機房熱鬧非凡,牆上裝飾了各色氣球,每個氣球下方都貼著「A、B、C、D...」的題目編號。
「我看網上說這比賽有個特色,做出哪道題就會收到對應顏色的氣球」,郭曉川指著牆面給隊友解釋,「牆上的氣球和題號就是題目與氣球顏色的對應表。」
彭峰按了幾下開機鍵,小聲嘟囔「怎麼就只有中間的電腦能開。」
好巧不巧,肖樂的隊伍就坐在隔壁桌。「你們不知道 ACM正規比賽三個人只能用一台電腦嗎?」肖樂推了推眼鏡,語氣里是藏不住的嘲諷,他的兩個隊友也跟著發出附和的笑聲。
「我就看看備用機是不是好的嘛」,彭峰找補道。
郭曉川擺弄著系統環境,頓感不妙,沒有 VC6.0也沒有 C-Free,只有個 DevCPP看起來像是寫 C語言的軟體,打開來一通操作也沒能編譯個「Hello World」,便轉頭問陳小燕:「有你會的軟體嗎?」
陳小燕仔細翻了桌面圖標、開始菜單和幾個硬碟分區,,無奈地搖頭:「我平時用 Visual Studio寫程序,這台電腦里好像沒裝。」
機房裡幾個管事的學長正穿梭忙碌,給新人解答各種問題。其中一個經過他們隊伍時突然停下腳步:「哎,你來了。」郭曉川抬頭一看,立刻認了出來,是去年圖書館電腦室遇到的那位「算法導論學長」。
「學長學長,能給電腦裝個 C-Free嗎?」開賽前學長在話筒里說過有需求儘管提,所以郭曉川試著問道。
「Dev一樣可以編譯C……」學長話說一半又停住,「行吧,等下我找個志願者給你裝一個」。
肖樂突然湊了過來,「你認識尹南巍啊?!」
「以前見過一次。哦!他就是群里一直指導新人的學長!」郭曉川這才將名字與人對上號。
「不兒,你竟然不知道他?」肖樂瞪大了眼睛,滿是不可思議,「校隊三大台柱子之一,數據結構大師,全院但凡能寫出幾行像樣代碼的,哪個不把他當偶像?有他們隊,今年是最有希望亞洲區域賽奪金的一年。」
郭曉川看著尹南巍繼續走向機房後方的背影,心中湧起一股敬佩之意。
「你是郭曉川嗎?」一個熟悉的聲音從身後傳來。郭曉川回頭,看見湯雨薇晃了晃手中的U盤,正開玩笑地喊他。
「救星來了!」彭峰立刻拉開凳子讓出位置。
「你們要的 C-Free」,湯雨薇把 U盤遞過來,眼神掃過陳小燕時,四目相對都閃過一絲遲疑,好像要弄清對方是誰的感覺。
很快軟體運行正常,湯雨薇笑著擺擺手:「我去忙別的了」,便小跑著去處理其他隊伍的需求。
機房廣播突然響起尹南巍的聲音:「大家回到各自隊伍的位置坐好,比賽還有1分鐘開始。」
郭曉川三人迅速坐定,點開編程軟體和瀏覽器里的 OJ地址,屏幕上的光標在空白代碼界面里靜靜閃爍,等待著他們第一次 ACM比賽的正式開始。
「什麼是ACM?」
「為啥一會兒叫ACM,一會兒叫ICPC?」
「校賽是開卷還是閉卷?」
「啥是模板?」
「用啥語言啊?Java可以嗎?」
「兩個人可以參賽嗎?」
「用什麼編譯器?」
「啥是封榜?」
「電腦里的計算器可以用嗎?」
「比賽機器有VC6.0嗎?」
……
郭曉川滑動著聊天記錄,不禁感嘆有這麼多自己從未想過的問題。
群名片為尹南巍的管理員始終耐心解答,裴羅遠、趙不易等幾位管理員也不時加入討論,講解著一些令人似懂非懂的算法概念。海量的信息在聊天窗口中蹦出,郭曉川只感覺比剛過去的半年大一學的東西都多。
忽然一個新的消息閃動打斷了他的思緒——他被拉進了一個三人討論組。
「咱們學校的湘和醫學院,生醫工的陳小燕同學,川兒你見過的,去年班級聯誼包餃子」,彭峰介紹道,「這是我室友,數學王子郭曉川。」
郭曉川立刻記起了年前那場班級聯誼活動。
南北差異顯著,兩個班四十多人參與,會包餃子的人卻寥寥無幾。作為北方人,郭曉川雖會包餃子,但擀皮並不熟練,卻不得不承擔了從擀皮到包制再到煮製的全套教學。令他驚訝的是,彭峰作為郴城娃,竟能包出形狀規整的餃子,讓他刮目相看。
聯誼班級的陳小燕,即便裹在臃腫的羽絨服里,清秀的面容和靈動的眼神依然引人注目。她專注觀察每個步驟,不到一小時就掌握了主要技巧,主動接替了和面擀皮的工作。最終,大家吃上了少量形態標準、多數形狀各異的餃子。
陳小燕學習時的專注神態和利落的動手能力,給郭曉川留下了深刻印象。
還沒等他回復,彭峰又發來消息:「她上學期已經給專業課寫了幾個數據處理程序,是能用的程序啊!恐怕是咱們隊的代碼擔當了。」
「不敢當不敢當,沒打過比賽,今天才開始看規則」,陳小燕發來了消息。
「數學靠你了川兒,需要啥我搞定,首先薄荷味兒益達管夠」。
郭曉川趕緊敲出「幸會幸會」,外加兩個加油的 QQ表情,一時也不知道該說些什麼。
「報名表看下沒問題我就發郵件了!」
「沒問題[調皮]」
「好」
緊接著彭峰的私聊窗口亮了起來:「明天有空不,去湘和醫學院碰個頭。」
「星城有多大,雲麓就有多大」這話委實不虛,從校本部門口出發,公交坐了好一陣子才到湘和新校區。
「陳小燕在上課,我們先逛逛等她。」彭峰提議道。
湘和實驗樓的一樓看起來是個展廳,有許多人體解剖圖、動靜脈血管系統建模,還有一具用釘子連接起來的完整人體骨架。
「你知道嗎,這裡其實有個地下室,裡面存屍體的,他們稱為『大體老師』。」彭峰神神秘秘地壓低聲音,「但是一樓下不去,得坐電梯到頂層,然後從另一個專用電梯下去。」
他湊近郭曉川,繼續說道:「大體老師都泡在地板下面的福馬林里,有個機關可以一下子拉起來,以前有一群學生偷偷進去誤觸機關,嚇得四散奔逃。門又出了故障出不去,嚇了半死,最後還是老師打開了通往一樓的捲簾門才出去的。」
彭峰眯了下眼睛:「想不想去看看?」
郭曉川感到背後一陣涼意,原來是一個通風口。
「來給我拍一張,我要做校內網頭像」,彭峰說著就拉起了人體骨架的手。
忽然手機響了起來,彭峰接起電話說:「哦,好,我們這就過來。」
湘和的食堂和南校的七八食堂沒有太大不同,菜式也很相似。郭曉川和彭峰打了菜找到桌子坐下,就看見陳小燕邁著輕快的步伐走了過來。齊耳短髮隨著走路的動作輕輕晃動,身上大紅色連帽衛衣格外亮眼。
「剛下課就跑過來了,久等啦」,陳小燕放下帆布書包拉開椅子坐下。
郭曉川打開了筆記本電腦。「我只做過十幾個題,大致介紹下。」
開始為這個臨時搭建的草台班子解釋起比賽規則,「比賽可以用 C或 C++,在一個叫做 Online Judge的系統上做題,簡稱 OJ。系統用電腦的瀏覽器訪問,登錄比賽的帳號後就能看到題目了。」
郭曉川打開了一道POJ的題目,指著屏幕解釋道:「題大概長這樣,首先是一些背景與要求的描述。舉個最簡單的例子,『給a和b兩個數,求兩數之和』,題目會給一系列輸入數據,將數據處理後按要求輸出結果。所以題目描述中會具體說明輸入數據的格式以及輸出數據的格式,另外會給一兩組輸入輸出的例子。」
他指著題目的樣例繼續說:
「比如這裡給出了樣例:
```
1 2
```
輸出的樣例是
```
3
```
就是要寫一個程序接受輸入,並計算`1+2`的結果`3`
OJ對格式的要求很嚴格,輸入輸出的順序,哪裡多個空格少個空格,都可能導致無法通過。」
郭曉川翻到了「評測狀態」頁,「除了出錯外,還有超時、超內存等一些其他狀態,只有「Accepted」表示通過題目,其他狀態都不行。」
「比賽的排名依據是通過題目的個數和一個叫『罰時』的小分,罰時和過題的時間、錯誤次數有關,具體規則暫時就先不管了,系統會自動計算。」
突然一個餐盤砸在三人旁的空位,湯汁濺在郭曉川的筆記本上。
「罰時規則都沒搞明白還想去參賽?」
一個中等偏瘦的男生出現在旁邊,輕微駝背,短髮亂糟糟貼在額前,一副黑框眼鏡,深色T恤洗的有些褪色,搭配著一條磨白牛仔褲,整個人散發著技術宅的氣息。
「你又不是湘和的,怎麼每周都來?」陳小燕抽出紙巾幫郭曉川擦著筆記本,抬頭問道。
郭曉川收了筆記本,肖樂直接坐下,回道:「來向陳大神請教鹼基序列匹配算法啊」,他掃了眼郭曉川和彭峰,語氣裡帶著優越感:「聽不懂吧?」
「你說的啥,我也聽不懂。」陳小燕接道。
「原來是肖神,看來這次校賽一等獎勢在必得了。我們就是去玩玩,肖神多多指點」,彭峰接過話頭。
肖樂臉上的不屑少了些,但還是帶著掩飾不住的傲嬌:「罰時的基本計算就是把每道題通過時,距離比賽開始的時間加起來,所謂『罰』就是錯一次加罰20分鐘,通過題數相同的隊伍,罰時越少排名越靠前,就這麼簡單,這都搞不明白。」
「還是肖神厲害,三言兩語就講明白了」,彭峰奉承道。
肖樂面露得意,氣氛稍微緩和了些。「那要是罰時也一樣呢?」陳小燕抬頭追問。
「這...概率很小了」,肖樂頓了一下,看起來也不太清楚答案,說的略有吞吐,「有的比賽就當並列了,有的會再考慮誰先解出自己的最後一題。」說完他期待地看向陳小燕,等著她的誇讚。
「哦,那就是每道題花的時間不變的情況下,先做花時間短的題,罰時就更少」,郭曉川突然若有所思地開口。
「那才不是」,肖樂幾乎是本能地反駁,但話說到一半又停住,「哎?好像還真是。」
「啥意思川兒?沒懂。」彭峰一臉疑惑。
「比如解決三個題需要花費的時間分別是 10、20、30分鐘」,肖樂搶過話頭,「按順序做就是第 10分鐘做出第一題,第 10+20=30分鐘做出第二題,第 30+30=60分鐘做出第三題,假設都一次通過,罰時就是 10+30+60=100分鐘。但如果倒過來,第三題在第 30分鐘做出來,第二題在 30+20=50分鐘做出來,第一題在 50+10=60分鐘做出來,雖然都是在第 60分鐘解決了三道題,但罰時就成了 30+50+60=140分鐘,罰時比按從簡到難做多了 40分鐘。」
「哦~~」彭峰和陳小燕異口同聲。
「我吃完了,你們繼續」,肖樂端起餐盤起身,走到兩步突然回頭,對著郭曉川和彭峰擺出「I'm watching you」的手勢,陳小燕察覺到兩人的異樣回頭望去時,他立刻轉身,裝作什麼都沒有發生,向餐盤迴收台走去。
陳小燕看著他的背影納悶道:「你們叫他大神?他哪裡神了?」
「他把校內網當技術博客,大一之前就在寫技術文章,隨便做個貪吃蛇小遊戲都是灑灑水了。」彭峰迴道。
兩周後校賽如期而至,校本部的信息樓四樓機房熱鬧非凡,牆上裝飾了各色氣球,每個氣球下方都貼著「A、B、C、D...」的題目編號。
「我看網上說這比賽有個特色,做出哪道題就會收到對應顏色的氣球」,郭曉川指著牆面給隊友解釋,「牆上的氣球和題號就是題目與氣球顏色的對應表。」
彭峰按了幾下開機鍵,小聲嘟囔「怎麼就只有中間的電腦能開。」
好巧不巧,肖樂的隊伍就坐在隔壁桌。「你們不知道 ACM正規比賽三個人只能用一台電腦嗎?」肖樂推了推眼鏡,語氣里是藏不住的嘲諷,他的兩個隊友也跟著發出附和的笑聲。
「我就看看備用機是不是好的嘛」,彭峰找補道。
郭曉川擺弄著系統環境,頓感不妙,沒有 VC6.0也沒有 C-Free,只有個 DevCPP看起來像是寫 C語言的軟體,打開來一通操作也沒能編譯個「Hello World」,便轉頭問陳小燕:「有你會的軟體嗎?」
陳小燕仔細翻了桌面圖標、開始菜單和幾個硬碟分區,,無奈地搖頭:「我平時用 Visual Studio寫程序,這台電腦里好像沒裝。」
機房裡幾個管事的學長正穿梭忙碌,給新人解答各種問題。其中一個經過他們隊伍時突然停下腳步:「哎,你來了。」郭曉川抬頭一看,立刻認了出來,是去年圖書館電腦室遇到的那位「算法導論學長」。
「學長學長,能給電腦裝個 C-Free嗎?」開賽前學長在話筒里說過有需求儘管提,所以郭曉川試著問道。
「Dev一樣可以編譯C……」學長話說一半又停住,「行吧,等下我找個志願者給你裝一個」。
肖樂突然湊了過來,「你認識尹南巍啊?!」
「以前見過一次。哦!他就是群里一直指導新人的學長!」郭曉川這才將名字與人對上號。
「不兒,你竟然不知道他?」肖樂瞪大了眼睛,滿是不可思議,「校隊三大台柱子之一,數據結構大師,全院但凡能寫出幾行像樣代碼的,哪個不把他當偶像?有他們隊,今年是最有希望亞洲區域賽奪金的一年。」
郭曉川看著尹南巍繼續走向機房後方的背影,心中湧起一股敬佩之意。
「你是郭曉川嗎?」一個熟悉的聲音從身後傳來。郭曉川回頭,看見湯雨薇晃了晃手中的U盤,正開玩笑地喊他。
「救星來了!」彭峰立刻拉開凳子讓出位置。
「你們要的 C-Free」,湯雨薇把 U盤遞過來,眼神掃過陳小燕時,四目相對都閃過一絲遲疑,好像要弄清對方是誰的感覺。
很快軟體運行正常,湯雨薇笑著擺擺手:「我去忙別的了」,便小跑著去處理其他隊伍的需求。
機房廣播突然響起尹南巍的聲音:「大家回到各自隊伍的位置坐好,比賽還有1分鐘開始。」
郭曉川三人迅速坐定,點開編程軟體和瀏覽器里的 OJ地址,屏幕上的光標在空白代碼界面里靜靜閃爍,等待著他們第一次 ACM比賽的正式開始。