1. 程式人生 > >平時上機練習的注意點(NOIP2018)

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

一、比賽

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、根據輸入資料的範圍大致確定演算法複雜度,以下均是可能情況,不絕對:

202^20=一百萬,O
(2^n),搜尋 100100^3=一百萬,O(n^3),Flody/APSP/搜尋 10001000^2=一百萬,O(n^2),動態規劃/圖論 500000O(nlog(2,n)),二分答案/二分查詢/快排/歸併 1000000O(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、做題後:一定要覆盤和總結。

相關推薦

平時上機練習注意NOIP2018

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

vue中mixins的使用方法和注意

mixins基礎概況 vue中的解釋是這樣的,如果覺得語言枯燥的可以自行跳過嘿~ 混入 (mixins): 是一種分發 Vue 元件中可複用功能的非常靈活的方式。混入物件可以包含任意元件選項。當元件使用混入物件時,所有混入物件的選項將被混入該元件本身的選項。 怎麼用? 舉個栗子: 定義一個混入

python基礎注意

類(Class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。 方法:類中定義的函式。 類變數:類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。 資料成員:類變數或者例

python基礎注意

 每個模組都有一個__name__屬性,當其值是'__main__'時,表明該模組自身在執行,否則是被引入。 說明:__name__ 與 __main__ 底下是雙下劃線, _ _ 是這樣去掉中間的那個空格。 內建的函式 dir()

python基礎注意

Python使用\事項多行語句 String[0:-1]是第一個到倒數第二個 一行顯示多條語句的話,語句之間使用分號(;)分割 if elif else Print函式預設換行,在函式裡寫end=””就不會換行了 不可變資料(3 個):Number(數字)、String(字串)、

Swift開發中遇到的注意

這段時間開發專案的同時在看第三方庫Kingfisher的實現,感覺有一些東西也需要記錄和總結一下。 6. public private(set),public fileprivate(set) 這和weak一樣是變數的一種修飾,意思是該變數可以public訪

Swift開發中遇到的注意

最近的專案是使用Swift進行的開發,在開發過程中,有一些東西和OC是不太一樣的,需要特別的注意,這裡也就簡單的介紹和記錄一下。 1. 單例模式 在OC中的單例模式一般都是使用dispatch_once來實現的,可是在Swift4中,該方法已經被廢棄,也

cocosCreator注意暫時

1、一般會將場景中的所有負責影象顯示的節點都放在Canvas下面。這樣當Canvas的scale(縮放)屬性改變時,所有作為其子節點的影象也會跟著一起縮放以適應不同螢幕的大小。 2、Cocos Creator 中指令碼名稱就是元件的名稱,這個命名是大小寫敏感的!如果元件名稱

JavaScript中的小技巧和注意

tip:自己收集的一些前端注意事項 1.函式優先 函式宣告和變數宣告都會被提升,但是一個值得注意的細節是函式會首先被提升,然後才是變數 foo();//1 var foo; function foo(){ console.log(1);

scrapy爬蟲注意2—— 根據page迴圈遍歷頁面引數問題

1. 問題背景 在訪問如下這種論壇網頁時,經常會根據頁碼訪問接下來的頁面。很多時候,會將pageIdx帶入帶request中的meta中,以便將這個page資料傳遞下去,但是基於scrapy的yield機制,不同的寫法,會讓帶進去的page不同。

Android中Service的使用詳解和注意LocalService

開始,先稍稍講一點android中Service的概念和用途吧~ Service分為本地服務(LocalService)和遠端服務(RemoteService): 1、本地服務依附在主程序上而不是獨立的程序,這樣在一定程度上節約了資源,另外Local服務因為是在同一程序因此

PHP開發的注意持續更新

背景知識 這一篇部落格會持續更新和維護,主要是記錄一些平常工作上或者學習過程中遇到的一些注意事項,希望和大家學習與共勉。   1.關於json_encode和json_decode兩個函式的注意點: 1.json_decode():通常是將一個json字串轉成陣

寫給自己看-編寫測試用例的注意之後想到還會更新

1.標題寫全之後,步驟不需要再從頭開始寫操作 反案例 正案例 2.每條內容不宜過多,若不可避免的內容過多時,應加序號用於區分 反案例 正案例 3.寫結果時注意是否與其他功能有互動 例:商品成功下單後商品詳情頁面所購商品規格的數量和商品列表頁面該商品的銷售量是否改變、我的訂單中是否

小專案踩坑以及專案過程中的注意第一篇

批量整合後臺頁面 1、修改批量檔案的字尾名,下面將字尾.html改為.php 方法:開啟命令提示符,切換到我們要操作的目錄,用ren *.html *.php   就可以將.html文件改成.php文件 2、sublime中ctrl+shift+F可以對文件中的內

php小專案踩坑以及其中的注意第二篇

使用者登入頁面 1.通過資料庫驗證使用者名稱和密碼(可以將裡面要用到的資料庫資訊,放入到一個config檔案中) <?php define('DB_HOST','localhost'); define('DB_USER','root'); define('DB_PA

mysql注意持續更新

1.引數都用單引號引起來,防止出現型別轉換問題2.不用 NOT IN ,用IN ,因為NOT IN不會走索引, IN會走索引3.表和欄位的字符集和排序規則會影響索引4.經常使用EXPLAIN關鍵字進行s

Ubuntu的安裝以及重新安裝的注意儲存以前的使用者資料

最近折騰Ubuntu裝機,為了儲存以前的使用者資料。需要做一下操作:1. 為了能夠在下次安裝Ubuntu時能夠不破壞使用者資料,在磁碟分割槽時一定將使用者資料區域(/home/目錄)和Ubuntu的安裝目錄(根目錄/)單獨分兩個磁碟分割槽。swap分割槽2G即可,/boot分

PHP5升級到PHP7注意windows環境

在windows環境下  將php5升級到php7,只需在官網下載對應的php版本,修改php.ini檔案,並修改apache的配置檔案httpd.conf,註釋php5的內容,新增 #php7 support LoadModule php7_module "D:/php7

MySQL備忘

update 虛擬 主鍵 ble str 內聯 完全 語句 innodb 聯結表   創建聯結  FROM 表1,表2    與內連接作用相同類似;如果失去WHERE子句,會出現笛卡爾積現象   內聯結   INNER JOIN     高級聯結   自聯結   例子:

【Selenium-WebDriver自學】Selenium-IDE驗證

tel 用例 正常 程序 同時 兩種方法 col image 執行 =======================================================================================================