平時上機練習的注意點(NOIP2019)

一、比賽

A考前階段

1、提前15分鐘入場,利用好這幾分鐘的時間,做好準備工作。
2、靜坐調整心態,適當的深呼吸,不要緊張、坐立不安等。
3、設置編輯器IDE:i.默認路徑 ii.窗口大小 iii.TAB寬度 iv.編譯功能 v.重啓IDE

i 你喜歡的屏幕分辨率。ii 平時慣用的字體。iii 字體大小不要太小方便查錯。

4、準備文件:i.創建 .in .out。 ii.建好模板(頭文件,輸入輸出) iii.測試模板準確無誤

a. 同時注意文件名,保存要求,目錄結構
b.某些省份(如 河南)要求同時提交.exe文件,注意不要漏交。)

5、休息|再次調整心態:不要去想結果,只看過程,努力了就一定不會白費。

B看題階段

1、不要急於看內容,先將試題第一頁的 時間、內存限制 等等一字不落地看完。

i 雖然1s+128MB內存 (這是以前的了,現在應該是 1s + 256MB) 是標準配置,不過也不是每道題都是這樣的,還是請認真閱讀試卷首頁的試題說明
ii. 計算內存的方法:數組大小*類型長度/1000 / 1000=所佔內存MB數,int(Pascal:longint)類型長度是4, long long (Pascal: int64) =8
iii. 記不住的話,記住int (Pascal: longint) 型數組在128MB內存下最大開到2500 0000是比較保險的(佔100MB內存)

2、開始看題,看題時不能走神。重新描述並將題目 抽象化簡 ,提出主幹信息。

讀的時候積極思考,看看這某句話到底是個什麼意思,要會轉換。比如對於有時間的問題,到底把時間看成一個點,還是一個區間。

3、 結合樣例 看題目,確保自己 題意理解 沒有錯(如果樣例錯了回到上一步修改主幹信息)。

具體題目具體分析,一定要符合題意。題沒讀懂就開始做,100%是錯的。題錯,思路也就錯,時間浪費了, 數據還是1個都不過。

4、看完題目後將其歸入 某幾個框架 中,包括:模擬/枚舉/搜索/貪心/動態規劃/圖論/分治
5、根據輸入數據的範圍大致確定 算法複雜度 ,以下均是可能情況,不絕對:

20:2^20=一百萬,O(2^n),搜索
100:100^3=一百萬,O(n^3),Flody/APSP/搜索
1000:1000^2=一百萬,O(n^2),動態規劃/圖論
500000:O(nlog(2,n)),二分答案/二分查找/快排/歸併
1000000:O(n)或O(1),數學問題/改變思維方向/貪心
C寫題階段

1、寫下代碼前,必須保證 有充足的思考時間,有成熟的想法後再動手

所謂Think Twice, Code Once, 一定要想好了算法,思路清晰了再編。
對於稍難得題目:分析問題時遇到一些即興問起的情況,馬上要深入下去,看已有的算法思路是否有問題。經驗證明,這種即興提起的問題往往是決定算法正誤的關鍵問題。這是一種本能的質疑,本能的差錯,一定不要想:我一會再來看這個問題。一定要立即想清楚,看算法怎麼樣處理才能解決這樣一個問題。確認算法沒有什麼錯誤了再編。如果思路沒清晰,算法不對,編到一半時才發現錯了,這種情況沒有考慮到,浪費了很多時間,或者編完了都還不知道算法是錯的,最後由於樣例特殊,過了樣例,以爲對了,但實際上只得10分,或者根本不得分。
對於簡單的題:也一定要考慮全面,不是編好了程序再來考慮全面,而是想算法的時候就要考慮全面。不要知道個大概就開始寫,後來發現一些特殊數據要作特殊處理,又把程序改過去改過來,改得面目全非,最後老是改不對,不但影響心情,而且還是錯的。
總的來說:想好算法,寫下各個變量的意義,明確使用的時候都是遵照這些意義的。寫下關鍵的句子,分清各種情況,這個階段最重要,一定要仔細,不要急着編程。理清了思路再編程,寫好了關鍵句子再編程,弄清楚了變量再編程,速度會很快,而且正確率也很高。很多人就是犯不思考就編程這個錯誤,最後自己就昏了。於是浪費大量時間,而且題也做不出來。

2、不能想一點寫一點,就算是輸入部分也要在整體思路理清後再寫。

3、寫代碼前, 儘量用多而強的數據 去測試想到的算法,畢竟代碼寫完後再測試就浪費很多時間了

思考算法的時候,一定要考慮到特殊數據,或一些特殊情況。寫完了,還要再看各變量是否帶對,是否有筆誤。
寫完後也要:自己設計幾組數據,爭取卡死你的程序。如果你已經設計不出能卡住你的程序的數據,恭喜你可以做下一題了。

4、永遠別去寫從未接觸過的算法/數據結構(考場上), 同時減少負優化。

i.在內存允許的情況下,能開普通隊列就不要用循環隊列,能開下普通數組就不要用滾動數組
ii.在時間允許的情況下,能暴力就暴力,高精度能不壓位就不壓位,優化不需要的就不要
iii.總之,在不超限制的前提下,能不優化就不優化,以減少代碼量和出錯概率爲第一原則

5、如果想不到思路,試着找規律。紙筆都是好的夥伴。

i. 即使這道題看起來再沒法做,也不要提早放棄,這個時候紙和筆會是你最好的朋友,自己嘗試幾個例子,也許你就會找到答案
ii.如果這是一道動態規劃題,請先把轉移方程寫在紙上再編程
iii. 涉及到邊界處理、加一減一之類的問題,請在紙上舉個例子,標上下標以後,在編程時參照紙上的下標寫

6、如果實在想不到思路,就放棄。

i. 如果思考30分鐘仍一頭霧水,沒有可以實現的算法,請你果斷屏蔽掉100%的那一欄數據,開始寫60%,50%乃至30%的算法——在NOIP裏面,30分絕不是小數目
ii. 不要因爲一道題的時間丟了後面題目的分數。
iii. 看題要靈活,不要絆死在一道題,不要怕。NOIP的題不想就做出來,怎麼可能,肯定是需要想的。但是最好先寫好寫的題,不一定是前兩道題。其實很多時候你是有能力做起的,只是你一看就怕了,也沒有去認真想,隨便敷衍想了一點特殊情況的算法,認爲可以騙到分。但經驗證明最後基本是沒有分,即使有,最多不過10。時間是3個小時,要積極一點,經驗證明,很多題想到一定時候便想出來了。並且很簡單。

7、心態

i. 如果你發現你旁邊的人寫得很快,請你放心,他的算法十有八九是錯的

D寫完階段

1、程序按照思路編完之後,查 編譯錯誤。經驗證明,剛剛完成的程序不出編譯錯誤的機率基本爲0。
2、編譯全部修正後,千萬不要測樣例。一定是必要的調試手段。經驗證明,第一次就把樣例過了的機率很低,即使過了,在測自己的特殊數據的時候也會出錯。所以,編譯完後一定要 靜態查錯。經驗表明,靜態查錯是很有效果的。基本上每次靜態查錯都可以找到變量代錯的錯誤。特別是快排的I,J是否帶錯,DEC,INC是否搞錯,SWAP是不是加了VAR等等。

試想:
i如果沒有靜態查錯,就去測樣例,如果程序有錯,樣例不過,影響心情;
ii即使樣例過了,因爲程序有錯,特殊數據也不一定能過;即使特殊數據也過了,程序有錯,評測的時候絕對會錯。
iii那還不如一開始就靜態查,即使發現錯誤,獲得成就感,心情很好。
iv千萬不要慌着去測。要保證程序無錯,思路清晰,結構清晰了,然後再去測樣例,再去測特殊數據。
樣例過了不要得意,特殊數據過了不要得意,很有可能還有很多特殊情況你沒有想到。

3、如果程序錯了需要調試,一定要分模塊調試,不要從頭跟到尾。【具體轉調試技巧】
4、有多餘時間一定要進行對拍,即3個程序:生成數據、樸素算法、準備交的算法
5、交之前5-15分鐘千萬不要再改動代碼,主要留意代碼中是否還有測試程序時留下的痕跡。

i. 即使你懷疑它對你的一個輸入給出了錯誤答案,因爲你自己算出的結果也有可能是錯的
ii. 這個時候請你檢查是否註釋掉了該註釋掉的東西,文件名是否寫對,文件夾是否建對,請一定反覆檢查!

E結束階段

1、走出考場後,除非已經是Day2,永遠別對答案
2、做好心理準備,也許做了兩道自己認爲會全對的,還做了一道自己認爲能過幾組的。可能只得50。這也是有過的事情。除了做好那幾個步驟,沒有其他的辦法。認了吧。搬塊石頭砸天,也是沒有用的。
3、樹立正確的成敗觀。體驗第一,拿獎第二。往往能從失敗中學到更多的東西,得到更多的感悟。成功固然好,失敗也不錯。成事在天。做到了自己做到的,就是另一種意義上的成功。

二、練習

1、看題,寫題,寫完階段,都應該與比賽完全一樣
2、做題前:合理的分配時間,選擇能力範圍內合適的題。提前學習題目會用到的知識。
3、做題時:要限時做,比如30mins做,不要死調。
4、做題後:一定要覆盤和總結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章