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

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