280 likes | 547 Views
ACM 國際大學電腦程式設計競賽 ACM International Collegiate Programming Contest ( ACM-ICPC ). ACM-ICPC. 國際大學院校之年度程式設計競賽 總部設於 Baylor University ,由電腦協會 (Association for Computing Machinery, ACM) 及 IBM 公司贊助. ICPC 宗旨: Battle of the Brains. 促進國際各大學學生之間的交流。
E N D
ACM國際大學電腦程式設計競賽ACM International Collegiate Programming Contest(ACM-ICPC)
ACM-ICPC • 國際大學院校之年度程式設計競賽 • 總部設於Baylor University,由電腦協會(Association for Computing Machinery, ACM) 及IBM公司贊助
ICPC宗旨:Battle of the Brains • 促進國際各大學學生之間的交流。 • 提供學生一個機會,在有限的時間之內,藉由解決精心設計的複雜難題,以鍛鍊和展現其本身解決問題、程式設計,以及團隊合作的能力。 • 為學術界、產業界發掘下一代的資訊人才,讓參賽者有快速晉身的管道。
歷史 • 前身為1970年在美國德克薩斯A&M大學舉辦的比賽。當時的主辦方是the Alpha Chapter of the UPE Computer Science Honor Society。 • 此後,演變成為多國參與的國際性比賽,在1977年由ACM舉辦首次總決賽。 • 自1997年IBM開始贊助賽事之後,賽事規模增長迅速。
Contest Rule • ICPC 共分兩個階段: • 區域賽 (Regional Contest) • 世界賽 (World Final) • 區域賽表現優異的隊伍可以晉級世界賽,角逐世界冠軍的榮耀。 • 每年區域賽的日期大約是九月至十二月,世界賽則是在三月至四月舉行。
Contest Rule • 以團隊的形式代表各學校參賽,每隊由3名隊員組成。 • 每位隊員必須是大學在校學生(受大學教育五年內),最多可以參加2次全球總決賽和4次區域選拔賽。 • 每隊使用1部電腦在5個小時內使用C、C++、Java或Pascal程式語言解決8到10個問題,由解出題數最多且使用時間最少的隊伍獲勝。
Contest Rule • 程式以最後一次提交且被判定為正確的時間為提交時間。 • 每一次的錯誤判定將使程式的提交間增加20分鐘penalty。
Contest Rule • 參賽者將完成的程式碼線上繳交給裁判裁決,裁判以以手中的測試資料為基準,判定程式為 accepted (接受) 或 wrong answer (錯誤),程式可以重複提交直到被判定為接受為止。 • 錯誤訊息: • Accepted • Accepted (P.E.) • Wrong Answer • Time Limit Exceeded • etc……
Error Messages • Accepted 就是你的程式的輸出資料是正確的,也就是你成功的解出這問題. • Aceepted (P.E.) (Presentation Error)這是算是Accepted,就是你的輸出資料正確,但格式上有點小誤差 (多了一些空白行,或是空格之類的). • Wrong Answer你的程式成功的執行結束,但輸出的資料沒有完全正確. • Time Limit Exceeded (TL)大部份 Judge 所限的時間是十秒,也就是你的程式在十秒後還沒執行結束. • Memory Limit Exceeded (ML) 記憶體的使用量超過系統限制. • Output Limit Exceeded (OL):輸出的資料太大,超過限制.
Error Messages • Compile Error (CE)編譯錯誤.系統是使用Linux架的,所以C/C++的編譯器當然就是gcc啦 • Submission Error (SE)題號,使用者ID,使用語言沒填好,系統無法得知相關資訊. • Runtime Error(SIGSEGV)程式編譯正確,但執行時發生錯誤,通常是記憶體使用錯誤,像程式中除以0,或是用到不可用的記憶體(比如存取超過範圍的陣列元素) • Restricted Function (RF)你的程式有使用到系統限制的函式(如開啟檔案),或system (...)
Contest Rule 範例:A、B兩隊都正確完成兩道題目 • A隊於比賽開始後1:00和2:45提交兩題 • A隊的總用時為1:00+2:45=3:45 • B隊於比賽開始後1:20和2:00提交兩題,但B隊有一題提交了2次(錯誤一次)。 • B隊總用時為1:20+2:00+0:20=3:40 • B隊以總用時少而獲勝。
台灣地區比賽 • 由「全國大專電腦軟體設計競賽」參賽隊伍中,擇優推薦甲組六至八隊 • 報名參加「 ACM 亞洲區台灣賽區大學電腦程式設計競賽」,角逐台灣地區 ACM 國際大學電腦程式設計競賽之決賽權,但各校不得超過兩隊。 • 大專程式設計競賽之隊伍如取得「 ACM 亞洲區台灣賽區大學電腦程式設計競賽」之決賽權,成績最優之二隊可向教育部申請補助參賽費用。
台灣地區比賽 • 第31 屆ACM 國際大學電腦程式設計競賽亞洲高雄賽區(2006 Annual ACM International Collegiate Programming ContestAsia Kaohsiung Contest Site • 國立中山大學主辦 • 競賽活動日期 • 2006 年11 月17 日(週五)至11 月18 日(週六)
2007 Final • The 31st ACM International Collegiate • Programming Contest World Finals • March 12-16, 2007 - Hilton Tokyo Bay
Tips • 多透過Online Judge練習作題目 • Universidad de Valladolid Online Judge • Ural State University Online Judge • Tianjin University Online Judge • Saratov State University Online Judge • Sphere Online Judge • ACM-ICPC Live Archive Around the World • MIPT Online Judge • Peking University Online Judge • Zhejiang University Online Judge • Harbin Institute of Technology Online Judge • Fuzhou University Online Judge • Online Problems Solving System
Tips • 熟悉比賽作業系統: • 台灣區競賽使用的作業系統為 GNU/Linux SUSE Enterprise for desktop 10 • World Final使用的作業系統為Fedora Core 4 Linux • 熟悉比賽使用語言及發展工具環境: • 台灣區競賽使用的語言為 GNU C/C++ ;程式發展工具: Eclipse • World Final使用的語言為 Java (version 1.5)、C/C++ (GCC 4.0)、 Pascal ;程式發展工具: Java - Eclipse 3.1、C/C++ - CDT 3.0 under Eclipse 3.1、Pascal - Borland Kylix Version 3.0 • 熟悉比賽使用裁判程式: • PC2 (Programming Contest Control System)
Tips • 培養團隊默契: • 相互了解彼此的長處與短處 • 定好分工方式 • 立定得分策略: • 先分工瀏覽全部試題,挑出有把握的題目,集中全力解決之 • 若手邊仍有一些可能解出的題目,則可以儘早放棄履遇挫折的題目。 • 帶齊資料: • 參賽者可攜帶書籍、手冊、紙本的程式碼。但不可攜帶機器可讀寫的任何軟體或資料,亦不可攜帶自己的電腦、終端機、計算機、電子字典或PDA,並嚴禁使用行動電話及呼叫器,以免干擾其他隊伍作答。 • 記得帶一本好用的字典
Tips • 多準備(寫好)常用的函式或多使用C++ Standard Template Library • E.G.#include <stl.h>stack<int> S;queue<char> Q;priority_queue<int> PQ; • stack - S.push(), S.top(), S.pop(), S.empty() • You should always top on pop because top returns but does not remove the element on top, while pop removes but does not return the element. • Linked implementations ensure the stack will never be full. • queue – Q.front(), Q.back(), Q.push(), Q.pop(), and Q.empty() • hash_map – H.erase(), H.find(), H.insert() • priority_queue – PQ.push(), PQ.top(), PQ.pop(), PQ.empty() • set – S.set_union, S.set_intersection • sort or stable_sort