1. 程式人生 > >ACM常見錯誤

ACM常見錯誤

ACM中常見錯誤對應表
Waiting:你的程式剛剛提交,正在等待OJ評測你的程式。

Compiling:OJ正在編譯你的程式。

Accepted:OK!你的程式是正確的 ^_^。

Wrong Answer:你的程式執行的結果和正確結果不同。狀態頁面CASE那一覽顯示的是你的程式在第幾個樣例上出錯的。

Time Limit Exceeded:你的程式執行時間太長了,超過了對應題目的時間限制。

Memory Limit Exceeded:你的程式執行所用的記憶體太多了,超過了對應題目的限制。

Output Limit Exceeded:你的程式輸出了太多的內容了,超過了OJ的限制,輕檢查你的程式中是否有可能存在無限迴圈輸出。

Floating Point Error:Divide by 0,除0錯誤。

Segmentation Fault:有2中情況可能導致次錯誤:

buffer overflow – 緩衝區溢位,也就是你訪問 了非法記憶體,比如你神情了一個大小為2的陣列a,卻訪問了a[10000],或者在C/C++中訪問了空指標等等。

stack overflow – 堆疊溢位,有可能你在c/c++程式的函式中神情了過大的空間,或者遞迴層次太多,導致堆疊溢位了,輕記住堆疊的大小為8192KB.

Runtime Error:你的程式在執行的時候出錯了,異常終止了,導致這種狀態的情況有肯多,一般都是一些非法操作,比如檔案操作,Java中的網路操作等等。Java中Runtime Error的更詳細的敘述見下。另外C/C++中越界訪問函式中定義的陣列也會導致Runtime Error。

Restricted Function:你的程式呼叫了不該呼叫的函式,比如fork(),execv(),socket等等危險的函式,清牢記一點:在你的程式中只作與解決問題有關的事情,盡情其他的操作都會被OJ攔截下來。

Compilation Error:編譯錯誤,如果你的程式在本機能夠正常編譯,請在下面的編譯出錯怎麼辦檢視更詳細的解決辦法。

Presentation Error:你的程式執行的結果是正確的,但是格式和正確結果有點不一樣。比如中間多了回車或者空格,請仔細檢查程式的輸出部分,離AC就差一點點啦!

Presentation Error的一般原因?

PE就是沒通過。 沒通過就沒成績。 PE和wa, lte一樣。?

一般原因:?

1.格式問題要注意 每行最後要有回車,並且行末不能有多餘的空格。?

格式錯誤,請仔細檢查case末的空行、case間的空行、每一行後的空格,等這些地方,看與題目描述是否一致。?

2.答案正確,但格式不對。 ?

可能是多輸出了space/tab/return?

有人也說只有三種情況:?

1空行問題?

2大小寫問題?

3空格問題?

所以又pe說明你沒有根本錯誤,就是一些細節有錯誤。

下面是常見的OJ評判結果以及它們表示的意思:

Queuing : 提交太多了,OJ無法在第一時間給所有提交以評判結果,後面提交的程式將暫時處於排隊狀態等待OJ的評判。不過這個過程一般不會很長。

Compiling : 您提交的程式碼正在被編譯。

Running : 您的程式正在OJ上執行。

Judging : OJ正在檢查您程式的輸出是否正確。

Accepted (AC) : 您的程式是正確的,恭喜!

Presentation Error (PE) : 雖然您的程式貌似輸出了正確的結果,但是這個結果的格式有點問題。請檢查程式的輸出是否多了或者少了空格(’ ‘)、製表符(’\t’)或者換行符(’\n’)。

Wrong Answer (WA) : 輸出結果錯,這個一般認為是演算法有問題。

Runtime Error (RE) : 執行時錯誤,這個一般是程式在執行期間執行了非法的操作造成的。以下列出常見的錯誤型別:

ACCESS_VIOLATION 您的程式想從一些非法的地址空間讀取或向其中寫入內容。一般例如指標、陣列下標越界都會造成這個錯誤的。
ARRAY_BOUNDS_EXCEEDED 您的程式試圖訪問一個超出硬體支援範圍的陣列單元。
FLOAT_DENORMAL_OPERAND 進行了一個非正常的浮點操作。一般是由於一個非正常的浮點數參與了浮點操作所引起的,比如這個數的浮點格式不正確。
FLOAT_DIVIDE_BY_ZERO 浮點數除法出現除數為零的異常。
FLOAT_OVERFLOW 浮點溢位。要表示的數太大,超出了浮點數的表示範圍。
FLOAT_UNDERFLOW 浮點下溢。要表示的數太小,超出了浮點數的表示範圍。
INTEGER_DIVIDE_BY_ZERO 在進行整數除法的時候出現了除數為零的異常。
INTEGER_OVERFLOW 整數溢位。要表示的數值太大,超出了整數變數的範圍。
STACK_OVERFLOW 棧溢位。一般是由於無限遞迴或者在函式裡使用了太大的陣列變數的原因。顧名思義,stack overflow 就是是棧溢位了。在進行數值運算時,我們常常要和運算結果的溢位打交道。數值運算結果可能上溢(overflow),也可能是下溢(underflow)。不過棧的溢位顯然只可能是上溢,即棧空間被用完了。
要正確處理棧溢位採用以下辦法:
(1)修正我們的程式,不要造成無窮遞迴或太深的遞迴。我們可以把某些遞迴程式碼非遞迴化,例如那個經典的 qsort ,最好就用非遞迴的演算法來實現,就比較皮實一點。
(2)修正我們的程式,不要定義過大的區域性變數,特別是在定義大結構、大陣列時要格外小心。有時我們可能會用 _alloca() 這樣的特殊函式直接在棧上分配空間,更要多加註意。可以定義成static
(3)利用編譯器的特性,將程序允許的棧大小設定得大一些。例如可以採用 MSC 中的 /STACK 引數開關。
(4)對於那些還可能導致棧溢位的程式碼,採用 Microsoft 的結構化異常處理或標準的 C++ 異常處理機制,結合 _resetstkoflw() 進行處理。當然了,要是不嫌麻煩,我們也可以自己探測所用棧的大小,動態地檢測是否可能導致棧溢位,以避免可能的異常。
…… 其他錯誤,包括C++標準庫/STL執行時庫錯誤等,這裡不再舉例。

Time Limit Exceeded (TLE) : 您的程式執行的時間已經超出了這個題目的時間限制。

Memory Limit Exceeded (MLE) : 您的程式執行的記憶體已經超出了這個題目的記憶體限制。

Output Limit Exceeded (OLE) : 您的程式輸出內容太多,超過了這個題目的輸出限制。

Compilation Error (CE) : 您的程式語法有問題,編譯器無法編譯。具體的出錯資訊可以點選連結察看。

System Error (SE) : OJ內部出現錯誤。由於我們的OJ可能存在一些小問題,所以出現這個資訊請原諒,同時請及時與管理員聯絡。

Out Of Contest Time : 超出比賽時間,這個資訊只有在比賽的時候才會出現。