自從我開始使用 AtCoder 已經有四個月了,我終於成為業餘程式設計師了! !
這篇文章總結了我實際做過的事情以及在變成棕色之前的想法。使用的語言是 C++!
雖然我大學是工學系的,但並非資訊相關專業,所以對演算法和程式設計一竅不通。數學也是我高中最弱的科目之一。
偶然看到這個影片,促使我開始使用 AtCoder。剛看到影片的時候,我只是想:「看來有個網站可以讓初學者免費學習程式設計啊。」但當我開始用它解決問題時,我卻深深地著迷了。
我很幸運能看到這個影片,因為我一直想:「如果能編程的話一定很有趣。」順便說一句,在那之前我從未聽說過競技編程。
我先從簡單閱讀到第三章開始,然後在做題目時反覆溫習。目前來說,這部分 C++ 學習資料對我來說已經足夠了。
在開始學習 AtCoder 後的前 1-2 個月,我致力於解決 A 問題和 B 問題。這時我能夠在某種程度上使用 APG4b 第 1 章和第 2 章的內容。
回想起來,我覺得自己在這上面花了太多時間,一旦我習慣了,再開始解決問題 C 會更有效率。
一開始我嘗試依照最近順序填C題,但發現難度很高,就選了diff值低的題來做。不過比起B題,C題難度大很多,所以我主要看解說轉播,做AC題。
我開始的時候,大概可以解出 70% 的灰色 diff。我覺得 C 語言題的棕色 diff 稍微高於我現在的水平,我的自解率大概在 30% 左右。每次解出來之後我都很開心。有時候理解解釋需要很長時間。
不知怎麼的,我在學校圖書館找到了這本書,就借了去試了試。我讀到了中級水平,並做了練習問題。我學習了窮舉搜尋、關聯陣列、圖、累計和等等。每個類別大約有15道練習題,所以我可以用它來鞏固我的知識。
我買這本書是因為我覺得我數學不太好。難度從1到5級,我把4級以下的題目都解出來了。我學到了很多數學知識,尤其學到了很多關於逆、素數和數學推理的知識。我覺得我的強項在D題、E題以及典型的90分題目上比在C題上更突出,所以我覺得以後讀這本書會更有用。
當我開始參加考試的時候,我的訓練開始變得有些乏味,我很慶幸自己這麼做了。我花了很多時間在A題和B題上,有時C題我做完一次就做不出來,所以我意識到了自己的弱點。我計劃以後繼續定期參加考試。希望有一天能拿到第一名!
這就是我開始喝茶之前所做的一切。
與其說某件事決定了我加入茶道,不如說是透過學習一些教材,加深了我的理解,最終讓我能夠加入茶道。最後,我會發布我的 AtCoder 練習題的連結,如果你有興趣的話,可以看看。
最近,我終於理解了「意識到計算複雜性」這句話的意思。
我知道C題是測驗計算複雜度的題目,但我當時只想著「也許我只需要避免雙循環」。也因為如此,我之前一直沒能想清楚應該用哪些演算法和資料結構來解決這個問題。然而,在了解了每種演算法和資料結構的計算複雜度之後,我能夠在一定程度上觀察約束條件並預測解決方案。例如,當我看到一個問題卻不知如何解決時,如果問題的約束條件意味著我無法使用O(N^2),我會考慮是否可以使用二分查找或累積和(如果O(NlogN)或O(N)是可行的)。透過這種方式,我能夠透過思考如何在給定的約束條件下最大限度地利用計算複雜度來找到解決方案。這對很多人來說可能顯而易見,但自從我發現這一點以來,我能夠更頻繁地解決C題。
當我開始解決問題C時,我從一開始就盡量不去想窮舉搜尋。出於某種原因,我把窮舉搜尋和其他演算法在腦子裡分開了。然而,我意識到有些問題可以透過窮舉搜尋來解決,而思考窮舉搜尋可以幫助你理解這需要什麼樣的創造力。這似乎顯而易見,但我認為重要的是要意識到窮舉搜尋也是一種搜尋演算法。
Kenchon 的部落格文章、講解廣播以及前面提到的《演算法數學》一書中的插圖都非常淺顯易懂,我認為專家們一看到問題,腦子裡就能立刻浮現出具體的圖像和圖表。我目前還不擅長快速具體地想像出合適的圖表,但自從我開始意識到這一點後,我的解題速度就提高了。我現在還會用畫圖軟體把問題畫在紙上。
有好幾次,我看著解釋,發現其實只是方程式的變換,但解題的時候卻完全不知道怎麼解。我想這是因為我一直在思考該用什麼演算法。現在,看到一個方程式,我就會試著用各種方法去修改它。
主流的做法似乎是先看題目幾分鐘,如果不懂解法就看解釋。但我是那種會想「再想!解不出來真讓人鬱悶」的人,所以花了很多時間思考(有時甚至一個半小時)。高手好像有各種各樣的類型,所以我覺得用適合自己的解題方法就好。
解釋AC是意識形態分裂的圖像。
・Chokudaisan:說明AC 如果沒有快點做的話效率很低
・evima:(AtCoder 分數)/ 如果思考 20 分鐘後仍無法理解,則應查看解釋(25 分鐘,500 分)
·Rubikun:如果我認為這是一個知識遊戲,我就會解釋它。
・E8:不依賴AC,獨立思考很重要。
- Kenchon (@drken1215) 2020 年 7 月 22 日
我使用 Gemini,因為它對學生免費。
當我遇到難題,即使讀了解釋後仍不確定自己的理解時,我會直接把自己的解釋寫進程式碼裡,然後發送給 Gemini,讓它判斷我的想法是否正確。我還會用自己的話複述 Gemini 給我的解釋,並問自己“這真的是這個意思嗎?”,以確保我理解正確。
現在,我優先考慮的是增加我能解決的題目數量,而不是快速解決問題。快速解決問題的能力非常重要,但要獲得棕色等級,最重要的是能夠解決C題。盡可能快地完成兩題,並不會比盡可能慢地完成三題排名更高。未來我還想爭取完成四題,透過完成四題,我相信我對演算法和資料結構的理解會更加深入,自然而然就能在某種程度上加快解決問題的速度。
我的下一個目標是成為綠色程式設計師!
我考慮過可以採取一些措施來實現這一目標。
### 繼續解決問題 C
確保AC能夠快速啟動。
### 解決EDPC
您肯定需要 DP 來完成 4 和 5。
因為它不是C題的重點,幾乎沒有涉及。
###閱讀Kenchon 的書
加深理解解決D、E問題所需的基本演算法和資料結構。
### Red Coder 指南:提升你的競技程式設計和 AtCoder 技能 [中級:目標是成為 Light Blue Coder! ] 2-3. 解答 100 道按學科領域劃分的精選過往問題,適合初學者和中級水平
學習比你的能力高一到兩級的問題和演算法。
###學習正規表示式
它似乎很有用,因為它可以用於其他語言。低優先級。
###競賽程式設計通常有 90 個問題,解答評分為 4 或更低
培養洞察力。
我認為如果我只做過去式的題目會很無聊。
我依照Ebima的影片搭建了環境。影片非常容易理解,我能夠順利地搭建環境。謝謝你,Ebima。
[競技程式設計] 初學者如何入門 AtCoder 並在 10 個月內獲得 Light Blue 憑證 [慢速講解]這部影片非常實用,我希望所有剛開始使用 AtCoder 的人都能觀看,或者更確切地說,我希望它能正式推出。我透過實踐這部影片中的內容,開始學習程式設計。我認為大多數人只要不偏離影片中介紹的內容太多,就能進步。謝謝你,Frest。我會繼續把它當作參考。
AtCoder 擁有許多實用且有趣的擴充功能。安裝擴充功能將提升 AtCoder 的效率和使用體驗,因此我們建議您安裝它們。
#### 建立 Twitter 帳戶
起初,我並沒有打算建立一個,但由於許多高級用戶都建議我使用 Twitter,所以我決定建立一個。
到目前為止,我很高興自己做到了。看到其他同學對學習充滿熱情,以及同等程度的同學努力學習,常常激勵我更努力學習。
使用巨集
我參考了《競技程式設計:27 個宏,只需複製它們即可加速你的編碼》(慢速解釋)這本書。它非常有幫助。另外,當我查看專家的程式碼時,我會看到各種各樣的模板,這很有趣。儘管我常常看不懂他們寫的內容。
比賽當天最好小睡一會兒,這樣你就不會在比賽中感到困倦。我表現好的日子都是睡得好的日子。把你的想法寫在紙上或用繪畫軟體寫出來是個好主意。我參考了解說節目裡的寫作指導。有些人似乎會用一些可以製作圖表的網站,但我還沒用過。
即使不使用 Union-Find 和 lambda 表達式,你仍然會得到棕色,但是如果你能使用一點點,它就會非常有用。
一開始,我很難思考必要條件、充分條件、極端情況和陣列索引,但我想在解決一定數量的問題後我就會習慣的。
另外,當我心情低落時,我會看 AtCoder 的現場解說影片。那裡有很多有趣的影片,而且你可能會從觀看其他人的解題過程中有所收穫,所以我覺得如果你有時間的話,還是值得一看的。我個人希望看到更多 AtCoder 的語音機器人解說員。
說實話,我好像是連續幾週做適合自己的題目才達到棕色的。我正在努力學習C語言,但還是遇到很多答不出來的題,我擔心自己會掉回灰色。
等我成為新手程式設計師後,我想再寫一篇文章。下次我會盡量讓文章更容易讀一些。
我無法很好地總結它,最終它成為了一篇很長的文章,但還是感謝您讀到這裡。
原文出處:https://qiita.com/japaneseotaku/items/0036a539c68c735cbc74