這次居然突破了自己 rank3 的魔咒,成功躋身 rank2。不過,從分數上看,70 + nan + 30 = 100,仍然不滿意。像 lgj 說的,賽場上居然沒有人 a 一題。
賽後跟同學交流完,其實前兩題都不難編。至於第三題,則需要有堅實的資料結構的基礎,能分析後轉化問題的能力。這個,或許就是我目前最為欠缺的。
比賽一開始看了下,t1 和 t3 貌似是資料結構題,t2 是數論?腦抽把冪的符號(因為 smoj 不支援上下標,用「^」代替了)看成了異或,推樣例怎麼都推不對,有點慌。後來想了想,應該不大可能考 xor,然後突然發現這是冪的符號。浪費了好幾分鐘,還弄得整個人的心理狀態一上來就很緊張。
決定先搞搞 t1。花 10min 打了個暴力,交了之後第乙個點過了。極限情況是 o(
n2) 的,也就意味著應該是 50 分。
因為之前也 yy 過一兩道資料結構題的玄學優化,效果好像都可以,最起碼能多拿 20 分,於是就開始推 t1 正解。
推了十幾分鐘,腦子靈光乍現(其實是突然一抽),搞出了一種 log 平方的做法,開始碼。但是因為很多地方沒想清楚,打完,調到過樣例,整整花了 1h。考慮到結果可能會很大,也很多。當然是選擇手動 io 了。
交了之後也過了第乙個點。想接著去做後面題目的時候怕有點不穩,恰好又有暴力,就打了個資料生成器,對拍了一下。沒想到小資料都拍出了問題。
手算了一遍,發現暴力的結果是對的,也就意味著我的玄學搞法肯定寫錯了。要麼演算法本身就有漏洞,要麼實現上出了點偏差。我當然更希望是後者。
開始靜態查錯,沒發現邏輯上和實現的細節有什麼問題,於是單步除錯。
到乙個地方的時候,得到的值就跟自己想象的不一樣了。模擬了一遍,愉快地發現自己的理論有碩大的漏洞。
這時候再來補,能補得上嗎?怎麼補?心裡很煩躁。這樣肯定會影響狀態,倒不如先放輕鬆,再回來想。於是出了機房,到天台轉了一圈。
再回來的時候想到了補救的方法,但是比較麻煩,會使空間占用和常數都變大。權衡利弊之下,決定還是照這樣補。
弄好了之後馬上再對拍一遍,沒什麼問題。又構造了一下極限資料,發現 t 了。那也沒有辦法,只能是硬著頭皮就交上去了。
因為沒考慮到會有奇怪的情況,自以為一定是正確的,我白白浪費了好多時間,在 t1 上面整整耗了 2.5h。
比較之下,感覺 t3 更難,試圖推了 30min,沒什麼想法。直接交了個暴力,第乙個點也過了,就不去理它了。(然而暴力也有講究,我的**膜太多了……)
現在集中精力推 t2。先是打了個 o(
n4) 的暴力,樣例都會 t,當然不交。更何況看到賽場上交了的連第乙個點都沒過,猜想也是暴力。
分類討論了一下答案的種類,試圖找到一些規律,進行轉化,推出了 o(
n2n−
√)的做法,但還是會 t,並沒有什麼用。
想著會不會能過前面的一些小資料,於是先跟暴力對拍一下。不幸的事情發生了,到 n = 十幾的時候得到的答案就不一致了。
於是開始調,看是過程中哪一步出了問題。到某一步,覺得似是而非,隱約像出了點偏差,就改了那裡。重新拍,又有不一樣的小資料。
周而復始,某幾個地方被改動了幾次,思前想後,又覺得好像沒有什麼問題。就在我這樣糾結著,調著的時候,比賽結束了。
(後來我發現其實是暴力打錯了,我的做法雖然慢,但應該不會 wa,答案不一致的真相是:暴力的冪運算溢位了。)
按下 f5 重新整理成績頁面的一刻覺得自己絕對要炸了,但下一秒看見 rank2 的時候又覺得不可置信。但看各題得分,t1 70,t3 30,都在預料之內,差不多吧。
突然 aspe 大叫一聲,t2 過了!可惜,比賽已經結束 20s 了。這種情況實在是很令人惋惜,但又不得不思考:為什麼不能提高之前的效率,哪怕是一點點呢?
閒話休題,還是反思自己的表現,總結一下這場比賽過程中的得失。
第乙個,一定要想清楚再開始寫**。就像 cdc 一樣,整理好思路和框架,不要邊寫邊想,編碼效率極低,還不如花幾分鐘理順流程,寫起來一氣呵成。
第二個,在時間允許的情況下,寫完**一定要靜態查錯。編譯通過之後,不去試樣例,只是安靜地從頭到尾把自己的**閱讀一遍,不能遺漏任何一句,任何乙個量。檢查變數是不是打錯了(兩段相似操作如果直接複製,可能會導致變數含義相反)、陣列開的夠不夠大(切膚之痛,無向圖的邊集陣列開兩倍!)、程式的邏輯性是不是還存在問題等等。這個時候,一般是很容易發現錯誤的,並且還會有一種成就感。但是如果馬上測樣例,可能樣例是過了(因為樣例通常是比較弱的資料),而程式卻漏洞百出。又或者測樣例都錯了,這個時候會嚴重影響心情,再去查錯的話,事倍功半。
如果說還有乙個,就是我一開篇就提及的,對所學知識的透徹認識,分析和轉化問題的能力。像這次的 t3,我知道是線段樹,但完全不知道如何實現。聽 lgj 講完之後,茅塞頓開。(但是**碩難寫)應對這類題目,就需要培養:將賽場上的考題剝繭抽絲,返璞歸真,透過現象看出本質,通過不斷轉化最終變為已學範疇的能力。如何培養?對經典問題的多思考,想想可以怎麼變形。分析題目的時候嘗試抽象出數學模型,思考是否學過類似內容。
道理都懂,但最重要的是自己要將反思到的東西付諸行動。「紙上得來終覺淺,絕知此事要躬行。」
2023年3月初計畫及總結
且不寒暄太多,主要是回頭一看,17年已經過去6分之1,對我個人而言,除了工作上積累了一些經驗,其他方面仍沒有可喜變化,例如我的體重 此處應該穿插流汗的表情 不光要有長遠目標,短期小目標才方便實現。所以目前3月 6月末規劃如下 1.3月中旬開始參加pmp培訓,參加6月24日考試,主要原因有以下幾點 1...
2023年3月初Android求職回顧
大概2月中上旬的時候,因為個人原因,向公司提出離職,過程中雖然有一點波折,但是還是成功的而且好聚好散的在三月初離開了老東家。本來還想休息個十來天的樣子,結果每天乙個人在家的時候,感覺像是被這個世界拋棄掉了一樣,無所事事,十分痛苦。最後還是忍受不了這種寂寞,開始投簡歷,找工作。到目前為止,收到了5個面...
2017又是新的一年
如果是技術文章的話,我會很在意排版樣式什麼的,這是我一些個人的記錄,沒必要搞的多花哨.就隨意搞搞,你能看懂就行.我越來越發現有一種肥叫做加班肥了,我剛來公司的時候不到140,現在快160了.而且身體大不如前,新的一年因為老婆可能要搬過來一起住,所以必須要健身了,仰臥起坐,俯臥撐,臂力棒,深蹲.樣樣不...