AA 競程問問題教學

為什麼要學會問問題?

問問題是學習競程很重要的一環。好的提問方式能讓老師更快幫你找到問題,也能訓練你自己的除錯能力。很多時候,在整理問題的過程中,你就會自己發現答案了。

反過來說,如果你只丟一段程式碼然後說「這題不會」或「幫我看哪裡錯」,老師需要花很多時間重新理解你的思路,回覆速度會慢很多,對你的學習效果也比較差。

在哪裡問?站內「提問系統」

AACPOJ 內建了提問系統,你的每個提問都是一條和老師的私人對話串,老師回覆時,導覽列右上角、你頭像左邊的對話氣泡圖示(💬)會出現未讀數字。

導覽列右上角、頭像左邊的對話氣泡圖示(💬)就是提問系統入口;有未讀時會顯示紅色數字

從以下任一入口都能發問:

  • 題目頁右上角按「我要問這題」。
  • 某一筆提交紀錄(submission)頁面按「詢問這份程式碼」——系統會自動把那份程式碼帶進來(帶入的程式碼為唯讀,確保老師看到的就是你實際提交的版本)。
  • 點導覽列右上角、你頭像左邊的對話氣泡圖示(💬)進入提問系統,到「我的提問」頁後,按右上角綠色的「+ 我要提問」按鈕:

「我的提問」頁右上角的綠色「+ 我要提問」按鈕

上課中的即時小問題仍可在 Discord 討論區詢問;但凡是需要附程式碼、需要老師仔細看的問題,一律走站內提問系統,紀錄完整、也方便日後回顧。

發問時先選提問類型,系統會依類型顯示需要填的欄位:

類型 用在什麼時候
找不到程式碼錯誤 你的程式碼 WA / TLE / RE… 但找不到問題在哪
題解或影片講解不懂 看了題解、上課影片或投影片仍有不懂的段落
題目、教材、系統等錯誤回報 發現題目敘述、測資、教材或網站有錯
期中期末考/補考申請 申請某場考試的補考
其他 不屬於以上的一般問題

類型一:找不到程式碼錯誤

這是最常見的類型。請務必完整填寫,老師才能快速幫你。

⭐ 最重要:附上「完整程式碼」,再用「重點行」標記你想問的範圍

請一律貼上完整、可複製的程式碼,不要只截一段、只貼截圖、或只丟提交連結。

很多同學會「自己判斷哪裡有問題、只貼那幾行」——但真正的錯誤常常不在你以為的地方(例如你覺得是某個迴圈錯了,其實是前面 long long 沒開、或初始化漏了)。只貼你以為有問題的片段,老師反而看不到真正的線索。

那要怎麼讓老師知道你想問哪裡?用重點行功能:

  • 在程式碼編輯器裡選取你想問的那幾行,按「標記選取的行」,系統會自動把行號範圍帶入;也可以直接在欄位手填,例如 20-25, 40-42

建立提問:貼上完整程式碼,選取想問的幾行後按「標記選取的行」

  • 送出後,詳情頁會預設只顯示你標記的重點行(淺色標示),其餘程式碼收合成「展開上方/下方 N 行」,老師需要時再展開看上下文。

詳情頁:預設只顯示重點行,其餘收合成可展開的區段

這樣兼顧兩件事:老師有完整程式碼可看,同時一眼就知道你卡在哪

程式碼送出後 5 分鐘內,標題、內文、重點行都還可以再修改,發現標錯行了可以馬上更正。

怎麼帶入程式碼
  • 從 submission 頁的「詢問這份程式碼」進來,程式碼會自動帶入(連同評測結果、對應班級)。
  • 也可以在提問頁點「最近在 AACPOJ 的提交」直接帶入某一筆。
  • 或自己貼上:在程式碼框輸入,可「新增一份程式碼」附多份(例如 WA 版 + 你覺得應該對的版本)做對照。
還要填的資訊
  1. 提交後得到的結果:WA / TLE / MLE / RE / OLE / CE / PE…(從 submission 帶入時會自動填好)。
  2. 是 sample 就錯,還是正式測資才錯:這能幫老師判斷你是方向錯了,還是只有邊界沒處理好。
  3. 做法說明(內文):用文字簡單描述你的演算法,或你用的是上課教的哪一種做法。內文支援 Markdown、數學式與程式碼區塊。如果你的解法和上課教的不一樣,老師不一定能一眼看出你在做什麼,請務必說明思路。
送出前的「基本除錯檢查」

提問前系統會要求你逐一確認以下幾項——這些是競程最常見的錯誤,先自己檢查過往往就找到答案了:

  • 我已檢查是否可能整數溢位(中間計算會不會超過 2^31 − 1,約 2 × 10^9,該開 long long 嗎)。
  • 我已檢查陣列或 vector 大小是否足夠(對照題目範圍;注意 0-indexed 與 1-indexed)。
  • 我已檢查迴圈邊界、索引是否可能超出範圍。
  • 我已用至少五組自己設計的小測資測過,試著找出讓程式輸出錯誤的測資。
  • 我已看過 sample input/output,並確認自己的程式在 sample 上的狀態。
範例:好的提問 vs 不好的提問

不好的提問:

老師這題錯了幫我看(只貼一段你覺得有問題的程式碼)

好的提問:

我在寫「ABC368 A - Cut」,從這筆提交帶入程式碼,得到 WA,sample 就錯。 我已完成基本檢查,也試了 N=1、N=最大值都對,找不到會錯的情況。 重點行標了第 20–25 行(我懷疑是這段的迴圈邊界,但不太確定)。 我的做法:先把後 K 個元素存起來,再把前 N−K 個接在後面輸出。


類型二:題解或影片講解不懂

具體指出不懂的段落/影片時間點/投影片頁碼/程式碼行數,並說明你目前理解到哪裡、具體哪一句看不懂。若有對應題目或教材連結,也一併附上。

不好的提問:

老師我不會 DP。

好的提問:

老師,上課那題最長遞增子序列,我懂為什麼要用 DP,但不懂為什麼轉移式是取 max 而不是直接加 1。

提問的關鍵:說出你「已經知道什麼」和「從哪裡開始不懂」,老師才能從你卡住的地方開始解釋,而不是從頭講起。


類型三:題目、教材、系統等錯誤回報

請說明:發生錯誤的位置、你認為錯的內容、以及為什麼覺得有錯(可附反例、截圖或正確寫法)。這能幫老師快速確認並修正。


期中期末考/補考申請

選「期中期末考/補考申請」後,從清單選擇考試,填寫可以開始考試的確切時間與理由即可。是否核准仍需老師回覆確認。


問題解決後

  • 如果是老師回覆後幫你解決的,請按「我了解了」結案,讓老師知道可以結束了。
  • 如果是你自己後來想到的(老師還沒回覆),請按「我已自己解決」並簡單說明你是怎麼解決的——留個紀錄,老師之後仍看得到,也方便整理成公開 FAQ。

不管哪種,回覆一聲都是基本禮貌,也讓老師不用再花時間想你的問題。


通用原則

提問前的自我檢查
  • 我有附上完整程式碼(不是片段、不是截圖)嗎?
  • 我有用重點行標記想問的範圍嗎?
  • 我有填評測結果錯誤階段嗎?
  • 我有自己嘗試除錯/思考過嗎?
  • 我有描述我的思路和卡住的地方嗎?
幾個好習慣
  1. 完整程式碼 + 重點行,不要只貼片段:你以為有問題的地方常常不是真正的問題,完整程式碼才能讓老師看到上下文,重點行則讓老師知道你想問哪裡。
  2. 不要只傳截圖:程式碼一律用文字(方便老師複製測試),截圖只適合補充說明錯誤畫面。
  3. 善用搜尋引擎與 AI:很多問題自己就能找到答案——
    • Google:基礎語法(例如「C++ sort 怎麼用」)直接搜尋就有。
    • ChatGPT / Claude 等 AI:可拿來問語法、解釋錯誤訊息、看某段程式碼為什麼 RE。
    • 但要注意:AI 給的演算法解法不一定正確,難題尤其可能講得頭頭是道卻邏輯錯誤。建議先自己想過,卡住時再用 AI 輔助理解語法與除錯,而不是直接叫它幫你想解法,否則會失去練習思考的機會。
  4. 問題解決後回覆一聲:讓老師知道問題已解決。