109 高中資訊學科能力複賽的參加心得
又墊底了。 但不一樣的是,這次比賽我收穫上不少。 早先的選手培訓課程 這是我覺得整個競賽當中,我最印象深刻而且最有收穫的課程。 在參加這門課程之前,其實我很厭惡演算法。因為數學跟邏輯不太好,所以我當時會覺得演算法很恐怖,看不懂,不敢學。但在上完這幾門課程後,我才發現到,很多演算法其實自己平時就在用,只是從未察覺。 就例如動態規劃 (Dynamic Programming) 好了,概念這就像是我平常在搞得快取 (Cache),把先前擷取 / 計算過的結果儲存下來,下次要用的時候,就直接把之前擷取 / 計算的結果拿出來。 hashmap cache_db; get_something(id) { declare data; if id not in cache_db data = _get_something(id) cache_db[id] = data else data = cache_db[id] return data } 還有圖論,這對我來講是個很新穎的演算法概念,而在聽邏輯之後覺得比想像中還要好懂。「廣度優先」和「深入優先」這兩個抽象的名詞,用老師的 GIF 講解之後就變得很好懂。但就是還不知道能用在哪些地方 😅 最後是逐個擊破(分而治,D&C)和貪婪演算法 (Greedy Method),雖然一開始沒聽懂,但後來自己回家找了 Wikipedia 之後就看懂了。也是個自己寫程式偶爾會想到,但沒發覺是個演算法的東西。 培訓課程的筆記 比賽的過程與收穫 雖然跟上次一樣,看不懂題目,或是看懂卻不會做,但其實我還是有一些額外的收穫。 先說為何我「看懂卻不會做」,就例如「給三個點,求圍起來的三角形面積」。我知道三個點圍起是直角三角形的作法,但我不知道不規則三角形的解法。 後來聽了講解之後,才知道要用的是海龍公式。真是遺憾,競賽時不能用網路,所以我沒辦法上網查「三個點求三角形面積」的公式,而且我也忘了海龍公式。只能說是數學基礎不夠好。 還有下面這種「數字包數字」的題目,這題我至今還不會做,希望未來能看到能看懂的解法: 7 4444444 6 4333334 5 4322234 4 4321234 3 4322234 2 4333334 1 4444444 0 1234567 這一題中,N=4,而我們會給四個數字,分別為 x1 y1 和 x2 y2。求 (x1, y1) 和 (x2, y2) 的值 ...