NOIP考點總結

2021-08-08 15:40:19 字數 4896 閱讀 6247

一發noip考點的總結。

noip考綱總結+noip考前經驗談

首先來一張圖,很直觀(截止到2023年資料)

下面是收集的一些,我改了一下

紅色加粗表示特別重要,必須掌握

綠色加粗表示最好掌握,可能性不是很大,但是某些可以提高程式效率

高精度

a.加法

b.減法

c.乘法(應該只會有高精乘單精)

d.高精度除單精 (後面c,d考的可能性較小,應該只考a,b)

排序演算法

a.選擇排序

b.插入排序

c.hash排序

d.歸併排序(單純的排序可能用不到,有快排就行了,但是歸併排序的思想很重要)

e.堆排序

f.快排

字串匹配演算法

a.蠻力法

b.kmp

數論 a.歐幾里德演算法(用輾轉相除法求最大公約數)

b.擴充套件歐幾里德演算法 ax+by=c 的正整數

c.素數 o(sqrt(n))

d.篩法求素數

e.快速乘方(位運算+同餘+高精)

樹論 a.二叉搜尋樹

b.優先佇列(c++中priority_queue,相當於手動維護的小(大)根堆的資料結構優化)

c.線段樹 (rmq問題建議使用st演算法)

d.平衡樹一種(建議學習sbt)

圖論 a.拓撲排序

b.割頂,割邊(橋)

c.強連通分支 o(n)

d.有向無迴路圖的最長路徑

e.尤拉迴路

f.最小生成樹

① prime o(n2)

② kruskal o(m2)

g.次小生成樹

h.最短路徑

① dijkstra

② bellman-ford

③ spfa

④ flyod

單源點最短路徑演算法推薦使用spfa(即使你習慣dijkstra),dijkstra不能有負邊不能有迴路,所以用spfa更保險

計算幾何

a.判斷兩條線段是否相交

b.凸包演算法 o(n)

其他演算法

a.並查集

b.rmq

……【cogs】noip臨考經驗

提前15分鐘入場,此時靜坐調整心態,適當的深呼吸

開啟編輯器並調整為自己喜歡的介面

熟悉檔案目錄,寫好準確無誤的**模板

壓縮包或許還不能解壓,但是檔名已經可以知道了,在選手目錄下用**模板建好所有檔案,包 括.c/cpp/pas、.in、.out

開始比賽,不要急於看題目,將試題第一頁的時間、記憶體限制等等一字不落地看完

看題目時不能走神,看完題目後將其歸入某幾個框架中,包括:模擬/列舉/搜尋/貪心/動態規劃/圖論/分治

根據輸入資料的範圍大致確定演算法複雜度,以下均是可能情況,不絕對:

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),數學問題/改變思維方向/貪心

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

寫**前,盡量用多而強的資料去測試想到的演算法,畢竟**寫完後再測試就浪費很多時間了

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

永遠別去寫從未接觸過的演算法/資料結構

有多餘時間一定要進行對拍,即3個程式:生成資料、樸素演算法、準備交的演算法

交之前5分鐘千萬不要再改動**,主要留意**中是否還有測試程式時留下的痕跡

走出考場後,除非已經是day2,永遠別對答案

考前準備秘訣

《一》程式習慣注意

一、linux與windows的區別

a) 大小寫敏感

i. 在windows下,檔名大小寫不敏感,例如a.pas 與 a.pas 與 a.pas 與 a.pas沒有區別。

ii. linux視檔名為二進位制資料,所以區分大小寫。

iii. 考試時一定要看清題目上要求,區別大小寫。

b) 關閉檔案

i. windows在程式退出時預設自動關閉已開啟的檔案,會把快取中資料寫入硬碟。

ii. 在linux下必須由程式關閉檔案,否則沒有被寫入硬碟。

c) 回車符與換行符

i. 在windows下,兩行文字間有回車符 (ascii 13) 和 換行符 (ascii 10)。

ii. 而在linux下,只有換行符 (ascii 10)。

d) read 與 readln

i. 由於回車與換行在windows和 linux下存在有區別,程式設計時要格外注意。

ii. 尤其讀字串時,盡量採用readln,而不要 while not eof read或while not eofln read。

e) 多餘字元過濾

i. arbiter評測系統有多個外掛程式,分為整數比較(過濾無效字元)和逐字節比較。

ii. 由於評測外掛程式的原因,注意輸出結果時,盡量不要有多餘空格或換行。

iii. 對於乙個整數,使用write輸出。

iv. 對於多個整數,輸出最後乙個時不要有多餘空格或換行。

v. 對於乙個字串,盡量使用write整體輸出。

二、儲存檔案

a) 注意檔名,儲存要求,目錄結構等問題。

b) 某些省份(如 河南)要求同時提交.exe檔案,注意不要漏交。

《二》考前十點提醒

一、一定要想好了演算法,思路清晰了再編。分析問題時遇到一些即興問起的情況,馬上要深入下去,看已有的演算法思路是否有問題。經驗證明,這種即興提起的問題往往是決定演算法正誤的關鍵問題。這是一種本能的質疑,本能的差錯,一定不要想:我一會再來看這個問題。一定要立即想清楚,看演算法怎麼樣處理才能解決這樣乙個問題。確認演算法沒有什麼錯誤了再編。如果思路沒清晰,演算法不對,編到一半時才發現錯了,這種情況沒有考慮到,浪費了很多時間,或者編完了都還不知道演算法是錯的,最後由於樣例特殊,過了樣例,以為對了,但實際上只得10分,或者根本不得分。

二、對於簡單的題,一定要考慮全面,不是編好了程式再來考慮全面,而是想演算法的時候就要考慮全面。不要知道個大概就開始寫,後來發現一些特殊資料要作特殊處理,又把程式改過去改過來,改得面目全非,最後老是改不對,不但影響心情,而且還是錯的。

三、看題要靈活,不要絆死在一道題,不要怕。noip的題不想就做出來,怎麼可能,肯定是需要想的。但是最好先寫好寫的題,不一定是前兩道題。其實很多時候你是有能力做起的,只是你一看就怕了,也沒有去認真想,隨便敷衍想了一點特殊情況的演算法,認為可以騙到分。但經驗證明最後基本是沒有分,即使有,最多不過10。時間是3個小時,要積極一點,經驗證明,很多題想到一定時候便想出來了。並且很簡單。

四、一定要認真讀題,讀的時候積極思考,看看這某句話到底是個什麼意思,要會轉換。特別是對於有時間的問題,到底把時間看成乙個點,還是乙個區間,具體題目具體分析,一定要符合題意。題沒讀懂就開始做,100%是錯的。題錯,思路也就錯,時間浪費了, 資料還是1個都不過。

五、思考演算法的時候,一定要考慮到特殊資料,或一些特殊情況。想好演算法,寫下各個變數的意義,明確使用的時候都是遵照這些意義的。寫下關鍵的句子,分清各種情況,這個階段最重要,一定要仔細,不要急著程式設計。寫完了,還要再看各變數是否帶對,是否有筆誤。等到這些做完了,重複看下整個演算法實現過程,等自己解題思路清晰的時候,才開始程式設計。

六、理清了思路再程式設計,寫好了關鍵句子再程式設計,弄清楚了變數再程式設計,速度會很快,而且正確率也很高。

七、一定要先思考清楚。很多人就是犯不思考就程式設計這個錯誤,最後自己就昏了。於是浪費大量時間,而且題也做不出來。一定要避免這種情況。這樣就能勝於別人。

八、程式按照思路編完之後,查編譯錯誤。經驗證明,剛剛完成的程式不出編譯錯誤的機率基本為0。編譯全部修正後,千萬不要測樣例。經驗證明,第一次就把樣例過了的機率很低,即使過了,在測自己的特殊資料的時候也會出錯。所以,編譯完後一定要靜態查錯。經驗表明,靜態查錯是很有效果的。基本上每次靜態查錯都可以找到變數代錯的錯誤。特別是快排的i,j是否帶錯,dec,inc是否搞錯,swap是不是加了var等等。試想:如果沒有靜態查錯,就去測樣例,如果程式有錯,樣例不過,影響心情;即使樣例過了,因為程式有錯,特殊資料也不一定能過;即使特殊資料也過了,程式有錯,評測的時候絕對會錯。發現錯了,影響心情了,還是要來靜態查,心情不好,肯定效率低。那還不如一開始就靜態查,即使發現錯誤,獲得成就感,心情很好。千萬不要慌著去測。要保證程式無錯,思路清晰,結構清晰了,然後再去測樣例,再去測特殊資料。樣例過了不要得意,特殊資料過了不要得意,很有可能還有很多特殊情況你沒有想到。

九、做好心理準備,也許做了兩道自己認為會全對的,還做了一道自己認為能過幾組的。可能只得50。這也是有過的事情。除了做好那幾個步驟,沒有其他的辦法。認了吧。搬塊石頭砸天,也是沒有用的。

十、樹立正確的成敗觀。體驗第一,拿獎第二。往往能從失敗中學到更多的東西,得到更多的感悟。成功固然好,失敗也不錯。成事在天。做到了自己做到的,就是另一種意義上的成功。

《三》考前時間利用

一、考前幾分鐘時間,往往能決定成敗,所以一定要做好心態調整。不要去想結果,只看過程,努力了就一定不會白費。

二、在別人緊張、坐立不安的時候,你不妨把時間利用起來。依照慣例,考試前幾分鐘是可以先除錯電腦的,所以這時候一定要做些準備:

a) 設定ide

i. 預設路徑

ii. 視窗大小

iii. tab寬度

iv. 重啟ide

b) 準備檔案

i. 建立.in .out

ii. 建立模板

iii. 熟悉計算機,檢查有誤故障

c) 休息,等待開考

noip必會考點

普及組必學 1 模擬演算法 暴力列舉 按照題目的要求,題目怎麼說就怎麼做,保證時間和正確性即可。2 搜尋與回溯,主要的是dfs 深度優先搜尋 和bfs 寬度優先搜尋 基本沒有直接的暴力搜尋。一般是記憶化搜尋加剪枝,普及組第三題難度。3 簡單操作 如篩法 字首和 快速冪 高精度 輾轉相除法等,掌握全面...

簡單貪心模型 NOIP考點

這兩天把幾個貪心模型打了一遍,這裡就把模型及其證明總結一下。貪心性質 1.區域性最優解 全域性最優解 2.無後效性 貪心的選擇只取決於之前的狀態,後面的選擇不會影響當前的選擇 模型1 選擇不想交區間問題 題目 給定n個開區間 ai bi 選擇盡量多個區間,使得這些區間兩兩沒有公共點。思路 用b i ...

軟體工程考點總結

瀑布模型 需要有明確的需求分析 原型模型 採用動態定義需求,不需要有明確的需求 螺旋模型 結合了瀑布模型和演化模型的優點,加入了風險分析,防止了測試不足的情況 噴泉模型 主要用於物件導向開發,核心特點是迭代,開發活動沒有明顯邊界 增量模型 快速開發出可交付產品,無需知道所有需求 軟體專案管理集中在 ...