ACM國際大學生程序設計競賽(英文全稱:ACM International Collegiate Programming Contest(ACM-ICPC或ICPC)是由美國計算機協會(ACM)主辦的,一項旨在展示大學生創新能力、團隊精神和在壓力下編寫程序、分析和解 決問題能力的年度競賽。經過近30多年的發展,ACM國際大學生程序設計競賽已經發展成為最具影響力的大學生計算機競賽。賽事目前由IBM公司贊助。
?
?
北大ACM的地址: http://acm.pku.edu.cn
?
如何在北大ACM中提交問題的解答?
1.在北大ACM中注冊并登陸
2.點擊“Problems”按鈕查看所有的問題列表
3.點擊“Submit Problem”按鈕提交問題解答
4.在打開的頁面中輸入問題ID,選擇語言類型,并粘貼代碼
5.在“Online Status”中查看狀態,可以按照問題ID,以及用戶名進行過濾。
?
?
以下的北大ACM系統的FAQ,由英文原文翻譯所得:
Q : 你的程序從哪里獲取輸入,向何處輸出?
A : 你的程序只能從stdin獲取輸入,向stdout進行輸出。例如:可以使用C語言中的scanf獲取C++中的cin獲取輸入,而使用C語言中的printf或者C++中的cout進行輸出。 你的程序絕對不能嘗試去打開或者讀寫文件 ,否則將給出運行時錯誤提示或者錯誤答案。
?
Q : ACM使用的編譯器是什么?
A : 當前支持7種語言,6種編譯器。C和C++使用VC++ 2008 Express版。Java使用JDK1.5.0。
?
import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); int a = cin.nextInt(), b = cin.nextInt(); System.out.println(a + b); } }
?
使用Java語言尤其需要注意:
提交的Java程序必須是一個單源文件,并且是一個以Main命名的類,中間的執行代碼在靜態的main函數中,否則會引起編譯錯誤。
?
Q : 我的程序如何被判定?
A : 1. 你提交的程序首先將被保存在一個文件中,然后使用選定語言中的編譯器進行編譯。如果編譯失敗,將返回“Compile Error”。
2. 接下來將會運行你的程序,提供輸入并且進行計時。輸入數據被保存至一個或多個文件中。每個文件都被用于判定你的程序。程序運行過程中,如果發現你的程序運行狀態超過閾值(Runtime Error,Time Limit Exceed,Memory Llimit Exceed,Output Limited Exceed),結果將會被立即返回,不會做進一步的判定。這意味著如果出現了TLE或者MLE,并不意味著你的程序在提供了足夠的資源后將正確運行。當你的程序結束一個輸入文件并制造了一些輸出并存儲在一個輸出文件中,將會用這個輸出文件與正確的輸出進行比較。如果輸出不正確,則會給出Wrong Answer的提示。否則將會繼續處理下一個輸入文件。當所有的輸入文件處理結束后,如果沒有出現Presentation Error,則會返回Accepted。
?
Q : 返回信息都是什么意思?
A :
Waiting : 你的程序正在被進行判定,或者等候被判定
Accepted (AC) : 恭喜!你的程序已經生成了正確的結果。
Presentation Error (PE) : 你的程序的輸出格式不能完全匹配與所期望的結果,雖然輸出是正確的。這通常意味著在兩個非空白的字符之間存在著多余或缺失的空格(空格,Tab,換行),或者在兩個非空白行之間存在空白行。在行后的空白字符以及文件后的空白行將不會被認為是格式錯誤。
Wrong Answer (WA) : 你的程序沒有生成正確的輸出,特別判定程序會返回Wrong Answer而不是Presentation Error,以確保簡單性和健壯性。
Runtime Error (RE) : 你的程序在運行中出錯。可能的原因有非法文件訪問,堆棧溢出,指針引用越界,浮點異常,除以零等等。如果程序長時間處于等待狀態而沒有使用CPU進行計算,可能被認為是出現了RE。
Time Limit Exceed (TLE) : 程序運行總時間超出限制。
每一個Problem都有兩種時間限制,Total Time Limit和Case Time Limit。前者是你的程序處理所有輸入文件的總時間,后者是你的程序處理單個輸入文件的時間,超過兩者其一都會產生TLE。如果你被返回了TLE但是你的程序運行時間在限制范圍內,則你的程序一定是超過了CASE TIME LIMIT。
如果一個Problem沒有指定具體的單個輸入文件運行時間,則只適用總時間限制。
Memory Limit Exceed (MLE) : 你的程序超出內存使用限制。
Output Limit Exceed (OLE) : 你的程序生成了過多的輸出。當前的限制是期望輸出的兩倍大小。出現這種情況的原因可能是你的程序出現了死循環。
Compile Error (CE) : 程序編譯失敗。可以查看編譯器生成的警告和錯誤消息。
No such problem: 可能由于你提交了一個不存在的題目ID或者此題目當前處于不可用狀態
System Error : 你的程序無法運行。比如你的程序請求了硬件限制之上太多的內存。
Validate Error: 特別判定程序在檢查你的輸出時出錯,意味著特別判定程序可能存在缺陷,請聯系管理員,當然也有可能是你的程序的問題。
?
Q : 時間限制是1000MS,但是有些人的程序幾秒鐘才運行完,仍然得到Accepted
A : 大多數這樣的程序都是java程序,Java程序的時間限制放寬到總時間限制的三倍。并且對于每個輸入文件處理額外給出150MS的時間。
?
Q : 我的程序只比時間限制慢了15MS,怎樣才能提升?
A : 大多數情況下你的程序實際比時間限制更慢,因為在超過時限時判定程序將結束你的程序進程。通常這會產生15MS。通用的性能提升技巧在于使用有效的算法。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
