Hello, world!

你好。這裡是 Un_titled。
我只是一個普通得不能再普通的高中生,並自稱以競賽程式設計為興趣。

我只是因為偶然找到、覺得好像很有趣這種超級輕率的動機,從完全沒經驗開始踏入競程。
但由於我本身也是第一次接觸程式設計,所以在升到茶色之前吃了不少苦頭。因為剛開始的時候常常會想「如果有這種建議就好了!」,所以我把這些整理成文章。

希望這篇文章能幫助完全沒有經驗的人踏出第一步。

自我介紹

我是在國三春天接觸到競程的,但因為本來就沒什麼時間,也不知道該怎麼學程式設計,結果停滯在灰色整整一年。

高一時等級成長了很多,花了一年把分數提升到水色。
截至撰文時大概是這樣。

image.png

什麼是競賽程式設計?

在給定條件下,使用程式設計解決所給定的問題、課題,並競爭其過程與結果的方式,稱為競賽程式設計。
引用來源:什麼是競賽程式設計? - AtCoder Info

想必正在看這篇文章的各位,對競程的定義應該多少都有概念了。那麼詳細說明就先省略。

簡單來說,就是出一些像數學題的問題,然後寫程式來解答。

魅力

最值得一提、最大的魅力?就是樂趣。當然。

不只能享受「我在寫程式耶!好帥!!」這種感覺,當自己的分數(類似等級的東西)上升時,甚至會有種沉浸在多巴胺裡的感覺。超棒的。

能培養的技能等等

畢竟名字裡就有程式設計,實作能力應該會變得很強。
在實作的過程中,也會比較擅長有條理地思考事情。

因為有很強的解謎要素,所以也很可能讓腦袋轉得更快。我自己覺得開始競程之後,讀書吸收知識的效率也變高了。
也可能只是因為想玩競程的慾望驅使自己變得更有效率而已。

開始之前應該先具備的技能

我認為至少需要這些。

如果你對以下內容有不安,建議先補足再回來看。

  • 最基本的數學知識
  • 會四則運算
    • 習慣代數式
  • 熟悉電腦
    • 會開機
    • 知道右鍵、左鍵的意思等
    • 會用網路搜尋
  • 企圖心

進入正題
來介紹 AtCoder 的做法

建立帳號

AtCoder

這就是 AtCoder。
請先參考 AtCoder 的開始方式 完成使用者註冊。
帳號建立好之後再回來。

其他便利的服務還有

  • NoviSteps
  • AtCoder Problems

等等。請自行搜尋看看。

讓我們先建立基礎知識

選擇語言

目前主要使用的語言印象中以 C++ 和 Python 這兩種為主。
另外也有使用 Rust、C# 等語言的使用者。

如果你現在沒有特別想用的語言,我推薦 C++。
理由如下:

  • 解說常常是用 C++ 寫的
  • 執行速度快
  • C++ 使用者多

Python 常被說是入門門檻較低的語言,但和 C++ 相比,處理速度往往比較慢。(不過如果用 Codon 之類的工具就另當別論)
老實說,強的人不管用哪種語言都一樣強,所以如果你覺得自己會把做不到的事情怪到語言上,那就選 C++ 吧。

特別是 高中生以下、打算以資優生奧林匹亞為目標而開始的人,我也建議使用 C++
在準決賽與決賽階段,不只可能沒有保證能用 Python 解出滿分解法的情況,也可能只允許使用 C++。

語言學習方面,推薦使用一套叫做 APG4b 的教材。

C++ : C++入門 AtCoder Programming Guide for beginners (APG4b)

Python : Python入門 AtCoder Programming Guide for beginners (APG4bPython)

數學

只要有國中數學的知識,加上一些高中數學的知識,基本上就夠用了。

如果你對數學有苦手意識,推薦這本 アルゴリズム×数学 這本書。

基礎篇

不用太緊張。只要知道怎麼求面積之類的就沒問題。會四則運算,並且對代數式有一定程度的熟悉會比較好。

如果你會國中入學考常出現的鶴龜算,那就很強了。

我也建議把二進位好好學一下。這不算太難,請務必試試看。

中級篇

  • 場合數
  • 整數(倍數、因數、餘數等等)

如果這些已經掌握住,等到語言學習結束後會輕鬆一些。

進階篇

  • 同餘式
  • 歐幾里得演算法
  • 三角函數
  • 向量
  • 矩陣

我覺得這些大概只會在茶色之後才用到 1。先有心理準備的話,之後也許會更有動力去學。

環境建置

照這支影片做就能成功。
毫無疑問,還是有本機環境比較好。

不要輕易放棄的心

從周圍獲得刺激是很棒的事情。我自己也每天從許多 FF 朋友那裡獲得動力。

但是,過度比較不是正確答案,這點是很明顯的。
冷靜下來想就會懂,但網路上太強的人確實很顯眼。

如果現在有跟你一樣剛開始競程的人存在。然而,因為周遭環境不同,成長速度也會有很大的差距。能投入精進的時間、是否有程式設計經驗、數學知識量的差異……
實在不勝枚舉。當你快要洩氣的時候,也請務必意識到「自己的步調」。

我以前曾經在灰色停滯了將近一年。甚至在變成茶色之後,也經歷過掉回灰色。即使是那樣的人,一年後也升到了水色。
倖存者偏差?能享受的人才是贏家。成為倖存者吧。就是這種心情。

給有幹勁的人:開始使用 Twitter 吧

競程人很多都活躍在 Twitter 上。我覺得親切的人很多。當你發文說「我不懂~救我~」時,通常會有人給你建議。

我自己周圍沒有競程前輩,所以如果沒有 Twitter 上那些前輩的存在,我大概早就放棄了。

不過再說一次,Twitter 上強者特別顯眼。也常常會覺得主流區間都偏冷色系。

只要你在心裡發誓不要失去自己的步調,Twitter 上的競程人就會成為最棒的導引。

先想知道的詞語定義

基本用語集

先看一下競程典型 90 裡的 用語集,提交時應該就不會有困擾。

雖然沒列出來,但我認為最好知道的詞有:

  • 分數
    有點像偏差值。數字越高就越強。
  • 顏色
    分數會用顏色區分,像是等級一樣。灰~綠可稱為「自然色」,水與藍稱為「冷色」,黃~紅(自由色)則稱為「暖色」。
  • 表現
    就是 performance(成績)。參加 ABC 等比賽時就會懂。
  • rated / unrated
    會把比賽成績反映到分數的是 rated,不反映的是 unrated。超出 rated 範圍的比賽只能以 unrated 參加。unrated 有時也會被叫做「あんれ」。
  • Difficulty
    指的是「如果目前內部分數是這個值的人在比賽中看到這題,會有 50% 機率解出來的數值」。常簡稱為 diff。要注意的是這是 50% 的門檻,不代表「理所當然會解」。
  • A / H
    分別是演算法、啟發式競賽的首字母。
  • ABC
    AtCoder Beginners Contest 的縮寫。雖然說是給初學者的,但不是初學者第一次接觸就能全部解出來的,所以一開始可以先把「能解出 1 題」當作目標。

要怎麼變成茶色?

這裡是寫給使用 C++ APG4b 的人看的。

1 章一定要做到完全熟練。先從這裡開始。
2 章的難度會稍微提高,但我強烈建議整體看過一遍。
3 章、4 章則是有興趣時再看也沒問題。

等到 2 章結束後,試著解看看最近舉辦的 ABC 的 A 題、B 題。如果能輕鬆解出來,我想差不多就到了可以開始學演算法的時候了。

我認為最好是去買一本叫做 鐵則本 的書。

入茶也是我曾經非常痛苦的階段,所以我也有寫文章,如果有興趣可以參考看看。

最後

文章一直寫下去之後,好像也沒什麼要說的了。
感謝你看到最後。

總有一天我也想變成暖色。以上是水色下位的碎碎念。感謝各位的聆聽。

  1. 我認為,只要能夠老實實作出別人要求的內容,並且對基本計算量有概念,就能升到茶色。綠色之後就需要了。

原文出處:https://qiita.com/Un_titled/items/03b9b817bf2015321159


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   💬4   ❤️1
464
🥈
alicec
📝1   ❤️2
87
#4
我愛JS
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登