零、前言
對個人而言考得中規中矩吧,前面還行,沒啥差錯,中后期狀態不大行,注意力太集中又臨近飯點,做得有點窒息,下次要改良下早飯配方。
從結果來看省一應該有?對省一分數線沒啥概念。但目標當然是國一,感覺夠嗆,等課少了還要再刷點題。
UPDATE - 20201026:確實是省一,從結果來看省一要求還是挺低的。。不過排名比樊總低了好多,哭哭惹。
一、比賽概況
① 題型分布
A, B, C, D, E 共 5 題結果填空題;F, G, H, I, J 共 5 題程序設計題。
② 分值分布
A, B 題 5 分;C, D 題 10 分;E, F 題 15 分,G, H 題 20 分;I, J 題 25 分。
③ 得分情況
B, C, D, E, F, G 應該是滿分(共計 75 分);H 保證 20%(4分);I 基本爆零;J 保證 20%(5分),最多 40%(10分);分數區間大致為 [84, 89] 分。
為什么沒提 A?下面就知道了哈。
二、題目分析
(手頭沒題面,題目名稱和大意純憑顱內印象)
A 題 門牌號
題目大意:統計 1 到 2020 所有數的各個數位中的 2 的個數。
思路:可以手算可以編程,逐數逐位枚舉。
答案:624
考試過程:
先謝了個程序,結果是 624,於是又手算驗證一下,得到 623。機算很難錯,然而手算感覺也沒問題,於是一方面考慮到分值不高,一方面考慮到可以后面沒題做了再來算一次,說不定就對了,就把 623 / 624 兩個答案寫下來待定。
然而直到最后事實證明根本沒什么空閑時間,后面求不出正解的題基本都花了很多時間瞎搞撈分,以至於一直都沒有把結果 / 代碼謄到系統上,突然想起使匆匆忙忙地填了上去,填時都不知道哪一個是機算哪一個是手算。而根據往常經驗,多半就選擇了寫在前面的 623(?
B 題 既約分數
題目大意:求出所有分數 a / b,滿足 a, b 互質,且 1 <= a, b <= 2020。
思路:歐幾里得算法判斷是否互質,枚舉即可。
答案:2481215
考試過程:
很久很久以前,習得一種最精簡的求最小公倍數的函數,屢試不爽,然而卻總是不記得怎么寫的。考前一股神秘的力量推動我記下來這個函數,於是我就記下來了。准備時間我就把模板寫了下來,然而我卻寫錯了,也一直沒想過是模板記錯了,所以這么 ez 的題調了半年才發現錯誤哈。
我決定再寫一次:
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
C 題 蛇形矩陣
題目大意:給出下列矩陣,求第 20 行第 20 列的值。
1 2 6 7 15
3 5 8 14
4 9 13
10 12
11
思路:可以手算可以編程,個人認為手算找規律更快,因為所求值所在位置 x = y,直接沿着對角線對所有 x = y 的值找規律,1, 5, 13, 25, 41, 61, ...,每次增加 4, 8, 12, 16, ...,結果就很容易求得了。
答案:761
考試過程:無
D 題 七數碼
題目大意:求出七段數碼管能表示的不同結果,要求亮的二極管相互連通。
思路:同樣可以手算可以編程,首先根據七段數碼管的性質構建一張圖,相鄰的點連成邊;然后直接枚舉 2 ^ 7 = 128 種情況,針對每一種情況對圖進行 DFS,如果能跑到所有亮的二極管,則為可行方案,統計即可。
答案:80
考試過程:無
E 題 直線與圓
題目大意:求出 20 條直線和 20 個圓能將一個平面最多分割成多少部分。
思路:略
答案:1391
考試過程:無
F 題 成績分析
題目大意:給出 n 名學生的成績,求出最高分,最低分和平均值。
思路:簽到題
代碼:略
考試過程:無
G 題 回文年份
題目大意:給出一個 yyyymmdd 形式的日期,先求出該日期之后的下一個日期,要求滿足回文形式(即 ABCDDCBA),再求出滿足 ABABBABA 形式的下一個日期(兩個日期可以為同一天)。
思路:一道將回文判斷和日期判斷有機結合的實驗拼接題。為了避免思路混亂,將 8 個數位的表達式通過 #define 或其他形式表示,會使代碼清晰許多。接下來要做的就是對日期逐一枚舉,並先后判斷是否為回文(及 ABABBABA 形式)和是否為正確日期。
代碼:略
考試過程:無
H 題 子串序列
題目大意:給出一個字符串,對於所有子串,統計只出現一次的字符個數,並求總和。
思路:略
代碼:略
考試過程:略
I 題 略
題目大意:給出一個橢圓和一個三角形,求兩者面積交。
思路:掃描線,微積分(並未求出正解,僅供參考)
代碼:略
考試過程:
作為 mathking,看到這道題我是放棄的。甚至,作為 mathking,我在看到樣例給出的圖之前,壓根沒意識到那就是一個橢圓;更甚,我思考了許久橢圓的表示方法,以及橢圓的性質。
意識到是一道要用微分法的題目了,對數學的天然抵觸以及對新方法的好奇讓我做出一個並不明智的選擇 —— 我依稀記得多年前有聽說過的撒點法,靈機一動,准備用在這里。
先將三角形的四個方向的最遠端作為撒點范圍,開始撒!判斷是否在橢圓內是簡單的,即該點到橢圓的兩個焦點的距離和小於等於焦距;判斷是否在三角形內?我先想到了用函數表達式來求,然而同樣是對數學的天然抵觸,我選擇了用更粗暴的海倫公式 —— 假設三角形頂點為 A, B, C,當前撒的點為 O,如果滿足 S△ABO + S△BCO + S△ACO = S△ABC,則說明 O 在三角形內。
能想到這個辦法,大家都誇我是小天才。
然而知道海倫公式的都明白,各種浮點數和開平方根的使用,導致結果的精度是個大問題。事實上也確實是這樣,撒了半天,連數據范圍不及題目給出的萬分之一的樣例都難以求得精度范圍內的結果,39.99 的正解,在多次對 eps 和撒點數量的調整下,始終無法得到,所以直到最后,我交上去的甚至是個樣例都過不了的代碼。
J 題 冒泡排序
題目大意:要求給出一個字符串,對其進行冒泡排序使其升序排列,進行冒泡排序的 n 次交換后排序完成。
思路:略
代碼:略
考試過程:略
