ACM演算法競賽_快速入門v0.1(施工中)

aminuosi發表於2024-10-17

ACM演算法競賽_快速入門

For whosoever hath, to him shall be given, and he shall have more abundance: but whosoever hath not, from him shall be taken away even that he hath.

凡有的,還要加給他,叫他有餘。凡沒有的,連他所有的,也要奪去

《馬太福音》第13章第12節

目錄

  • ACM演算法競賽_快速入門
    • 目錄
      • ACM的好處❤
      • ACM的壞處😱
      • 基礎知識
        • 比賽規則
        • 評分規則
  • 如果你已經看到這裡,還沒有離開這篇部落格 那麼你完全可以試試ACM !
    • HOW TO START 🚀
    • STL(Standard Template Library)
    • True Start
    • AtCoder
    • Codeforces

ACM的好處❤

  1. 可以提高編碼能力,寫大碼量工程心理上負擔小()
  2. 建模能力++
  3. 鍛鍊人肉除錯能力()
  4. 鍛鍊智商
  5. 你的資料結構與演算法,基礎語言課能幾乎滿分
  6. 讓你的大學有事做
  7. 可以公費旅遊()
  8. 拿獎了可以加分,面試的時候也可以加分
  9. 你不知道學什麼的話,可以試試學ACM

ACM的壞處😱

  1. 可能過擬合競賽,導致所有程式碼有濃濃的競賽風 (千萬不要這樣!)
  2. 可能會被巨佬吊打
  3. 有可能會掛科
  4. 很可能找不到npy(存疑)
  5. 有可能和一部分校園生活說再見()
  6. 比賽時間經常在期中期末,可能會影響學習
  7. 需要很強的自學能力
  8. 要非常強的抗壓能力,
    能接受失敗/比賽坐牢/隊友跑路/被學弟暴打之類的事情
  9. 未知來源的不可抗力

基礎知識

ACM 其實是美國計算機協會贊助的年度競賽,
旨在展示大學生創新能力、團隊精神和在壓力下編寫程式、分析和解決問題能力。
(摘自baidu)

主要有兩個比賽:
ICPC(國際大學生程式設計競賽)
CCPC(中國大學生程式設計競賽)

比賽規則

ACM-ICPC以團隊的形式代表各學校參賽,每隊由至多3名隊員組成。每位隊員必須是在校學生,有一定的年齡限制,並且每年最多可以參加2站區域選拔賽。

比賽期間,每隊使用1臺電腦需要在5個小時內使用C/C++、Java和Python中的一種編寫程式解決7到13個問題。程式完成之後提交評測機執行,執行的結果會判定為正確或錯誤兩種並及時通知參賽隊。

每隊在正確完成一題後,組織者將在其位置上升起一隻代表該題顏色的氣球,每道題目第一支解決掉它的隊還會額外獲得一個“FIRST PROBLEM SOLVED”的氣球。

最後的獲勝者為正確解答題目最多且總用時最少的隊伍。每道試題用時將從競賽開始到試題解答被判定為正確為止,其間每一次提交執行結果被判錯誤的話將被加罰20分鐘時間,未正確解答的試題不記時。

與其它計算機程式競賽(例如國際資訊學奧林匹克,IOI)相比,ACM-ICPC的特點在於其題量大,每隊需要在5小時內完成7道或以上的題目。另外,一支隊伍只有1臺電腦,使得時間顯得更為緊張。因此除了紮實的專業水平,良好的團隊協作和心理素質同樣是獲勝的關鍵()。

評分規則

競賽進行5個小時,一般有7道或以上試題,由同隊的三名選手使用同一臺計算機協作完成。當解決了一道試題之後,將其提交給評測機,由評測機判斷其是否正確。若提交的程式執行不正確,則該程式將被退回給參賽隊,參賽隊可以進行修改後再一次提交該問題。程式判定結果有如下7種:

1、Accepted. ——透過!(AC)

2、Wrong Answer.——答案錯誤。(WA)

3、Runtime Error.——程式執行出錯,意外終止等。(RE)

4、Time Limit Exceeded. ——超時(超出時間限制)。程式沒在規定時間內出答案。(TLE)

5、Presentation Error. ——格式錯誤。程式沒按規定的格式輸出答案。(PE)

6、Memory Limit Exceeded. ——超記憶體(超出記憶體限制)。程式沒在規定空間內出答案。(MLE)

7、Compile Error. ——編譯錯誤。程式無法編譯。(CE)


競賽結束後,參賽各隊 以解出問題的多少進行排名,若解出問題數相同,按照總用時的長短排名

總用時為每個解決了的問題所用時間之和。一個解決了的問題所用的時間是競賽開始到提交被接受的時間加上該問題的罰時(每次提交通不過,罰時20分鐘)。沒有解決的問題不記時。

例如:A、B兩隊都正確完成兩道題目,其中A隊提交這兩題的時間分別是比賽開始後1:00和2:45,B隊為1:20和2:00,但B隊有一題提交了2次。這樣A隊的總用時為1:00+2:45=3:45而B隊為1:20+2:00+0:20=3:40,所以B隊以總用時少而獲勝。


如果你已經看到這裡,還沒有離開這篇部落格 那麼你完全可以試試ACM !

HOW TO START 🚀

  1. 選擇C++當作你的主力語言
    學習C++的基礎概念
    老生常談的一件事:
    選擇C++的原因是因為C++是ACM競賽的主流語言,而且C++的STL庫非常強大,可以幫助你快速解決問題。
    我們很少使用物件導向的內容,所有我們實際上學的是C+STL()

    (不過你最好也會python)
    然後開始刷語法題

  2. 熟練c++基礎語法,此時你應該可以做到校內c++課程的程式設計題滿分

STL(Standard Template Library)

這是演算法競賽最喜歡的東西(
STL是C++的標準模板庫,是C++的一部分,包含了很多常用的
資料結構和演算法,比如vector,set,map,queue,priority_queue,stac_k,bitset,string等等。
STL的使用可以大大提高你的程式設計效率,讓你的程式碼更加簡潔,更加易讀。
不過STL可能會導致程式用時稍稍增加,
所以在一些對時間要求非常嚴格的題目中,可能需要自己實現一些資料結構和演算法。
但是在大多數情況下,STL是非常足夠的喵。

True Start

掌握好了語言,你就掌握了實現演算法的工具
然後你就可以在OJ (Online Judge)上開始刷題了!
我們常用的OJ有:

  • Codeforces
  • AtCoder
  • 洛谷
  • nowcoder
  • qoj
  • LeetCode(不過這個是面試用的)
  • AcWing(就平臺來說,上面的模板題還不錯)

對於大部分的CONTEST
題目難度都遞增的
A<B<C<D<E .....這種
但是xcpc並非如此

AtCoder

AtCoder是一個日本的OJ,題目質量很高,題目難度適中,適合新手入門
他的大部分Contest時間是北京時間的週六晚上8點,比較適合亞洲人()
AtCoder的題目難度分:

ABC : AtCoder Beginner Contest 新手賽 (推薦)
ARC : AtCoder Regular Contest 常規賽
AGC : AtCoder Grand Contest 傳奇大師賽

ABC 的題目一般都比較直白,沒有太多的技巧,適合練習和學習new演算法

Codeforces

全球最大的ACM競賽平臺之一,題目質量很高,題目富有人類智慧,適合新手鍛鍊思維。
分為:
div4 一般為語法題,DEFG有簡單演算法+思維題
div3 稍難一點的div4()
div2 場次最多的contest
div1

相關文章