Hello你們好,我是洛谷的HansBug。首先自我介紹下,我如今在北京航空航天大學,計算機科學與技術專業讀大二,我參加過2013-2015年的提升組NOIP和NOI2015。算法
總體情況
- 初賽舉辦於大概每一年的十月中旬,大概在一個月後(光棍節先後)會進行NOIP複賽。
- 近些年初賽的門檻也愈來愈高,在江浙地區,有些市有些年份甚至普及組分數線能夠高達95,而其餘時候也至少得90才基本能保證進入複賽。
能夠說在中強省,初賽的要求愈來愈嚴格。那麼NOIP初賽有哪些基本的前置要求呢?數據結構
初賽基本要求
- 熟練運用比賽用語言(Pascal、C、C++,2020年開始NOI再也不支持Pascal和C,2022年開始NOIP將再也不支持Pascal和C),掌握最基本的語法知識
- 瞭解基本的計算機基礎知識,而且能進行簡單的運算
- 瞭解基本的算法和數據結構知識,而且能進行必定程度的運用(能夠說是整個NOI系列競賽的核心內容,時間關係不在本節詳細講述)
- 瞭解一些數學知識,並能進行簡單的運算
下面咱們來看看初賽大體是怎樣的題型分佈。學習
題型
NOIP初賽主要題型分爲四種:人工智能
- 選擇題
- 共佔30分
- 20題,每題1.5分
- 普及組所有爲單選題,提升組爲15個單選題和5個多選題(多選題徹底正確對纔給分)
- 問題求解
- 共佔10分
- 兩道題,近年來通常爲填空題形式,每題5分
- 讀程序
- 共佔32分
- 4題,每題8分
- 前三題通常爲單個填空,最後一道題有時會分紅幾個點做答
- 完善程序
- 共佔28分
- 分兩道完善程序題,將完整的程序挖掉一些空進行填空
- 每空2-3分,因評分標準而異
由此看來,選擇題、讀程序和完善程序都佔了大約三分之一不到一點的比例,哪一塊都是不能忽視的。遞歸
選擇題
主要考點:圖片
- 百科題、時事熱點題(2017提升組單選第1題,多選第四、5題)
- 計算機基礎知識計算題(2017提升組第二、三、4題)
- (重點)算法、數據結構、數學題(2017提升組第五、六、七、八、九、十、十一、十二、1三、1四、15,多選一、二、3題)(時間關係不在本節詳細講述)
那麼接下來,我來科普一些NOIP初賽選擇題常考的計算機基礎知識。get
計算機基礎知識
計算機發展史
- 第一代計算機:電子管計算機(表明:ENIAC,約佔地170平方米,運算速度每秒約5000次)
- 第二代計算機:晶體管計算機(體積依然挺大的,和現代的計算機樣子大不同,仍在使用紙帶編寫程序,運算速度每秒幾十萬次)
- 第三代計算機:中小規模集成電路計算機(已經有了一些現代電腦的模樣,每片集成不超過1000個邏輯門,每秒幾百萬次到幾千萬次)
- 第四代計算機:大、超大規模集成電路計算機(目前的計算機,2.0GHz,十億次運算每秒)
- 將來計算機:人工智能計算機?生物計算機?量子計算機?
說到這,不得不提一下計算機內部的存儲結構。數學
計算機存儲單位及換算關係
- 現代計算機均爲2進制計算機(惟一的非2進制計算機——ENIAC,採用十進制)
- 最小單位爲2進制位(Bit),基本單位爲字節(Byte)
- 換算關係(那麼接下來就是換算關係)
- 1 Byte = 8 Bit
- 1 KB = 1024 Byte (1 Kb = 1024 Bit)
- 1 MB = 1024 KB
- 1 GB = 1024 MB
- 1 TB = 1024 GB
- 1 PB = 1024 TB
- …………
- 1 Word = 16 / 32 / 64 / 128 Bit (視計算機字長而定,這個數字也被稱爲字長,目前主流爲32和64,部分GPU中可能存在128或者更高位數的狀況)
還有一類初賽百考不厭的題型就是進制轉換it
進制轉換
- 十進制轉化爲其餘進制
- 其餘進制轉化爲十進制
- 2^X進制與二進制之間的快速轉換(經過將每一位拆開,分別轉化爲二進制再拼接便可,轉回來則爲逆過程)
快速轉換的意義:對於有些比較多個不一樣進制下的數的大小的題目,咱們能夠將八、16進制的數快速轉化爲2進制,10進制的數轉化爲2進制,再在二進制下比較,這樣能夠大大節省計算時間。基礎
還有一類頻繁出如今卷子上的知識點就是數的表示法——原碼、反碼、補碼。
原碼、反碼、補碼
(均以8位二進制爲例)
- 原碼
- 首位爲符號位,0表示正,1表示負
- 後面的若干位爲數值位,表示數字的絕對值大小
- 特色
- 0有兩種表示法:1000000, 0000000
- 8位二進制原碼只能表示255個不一樣的數
- -128沒法表示
- 反碼
- 首位爲符號位,0表示正,1表示負
- 後面的若干位爲數值位
- 當數字爲_正數_時,和原碼同樣
- 數字爲負數時,爲絕對值的二進制取反
- 例如
- 127 -> 01111111
- 23 -> 00010111
- -127 -> 10000000
- -23 -> 11101000
- 0 -> 00000000
- -0 -> 11111111
- 特色
- 0有兩種表示法
- 8位二進制反碼只能表示255個不一樣的數
- -128沒法表示
- 補碼
- 首位爲符號位,0表示正,1表示負
- 後面的若干位爲數值爲
- 當數字爲_正數_時,和原碼同樣
- 數字爲負數時,在反碼的基礎上+1
- 10000000表示-128
- 例如
- 127 -> 01111111
- 23 -> 00010111
- -127 -> 10000001
- -23 -> 11101001
- 0 -> 00000000
- -128 -> 10000000
- 特色
- 0只有一種表示法
- 8位二進制補碼能表示256個不一樣的數
- 能夠表示-128
- 對於負數運算,能夠直接進行二進制加法運算,完美解決了負數運算的問題,故計算機中有符號整數類型通常都採用這一表示法
還有一類特別喜歡考的就是位圖(Bitmap)。
位圖
除此以外還考過不少其餘的相關點。
因此給你們的建議是:
- 關注前沿計算機技術方面的新聞
- 關注CCF和NOI系列競賽政策類新聞
- 多作題,熟悉各種基本知識
- 考試時要敢猜
問題求解
首先咱們來看下問題求解都有哪些考察點:
問題求解類題目的特色:
- 方法不少樣,不太容易總結通常性的套路
- 觀察近年來的題目能夠發現,答案數字大都不是很大。大部分題目,只要足夠細心和耐心,都是能夠暴力解決的
- 對於有些題目,不妨採用相似寫程序時採用的算法來解決
好比這樣一道例題:
因此說不少時候不要被限制住了思惟。換個角度想問題,或者說用本身最熟悉的方式想問題纔是上策。
複習方法:
- 多作題,熟悉通常排列組合題目的套組
- 算法和數據結構知識要作到活學活用
- 鍛鍊細心和耐心
讀程序
分析:
- 讀程序題一道題8分
- 意味着在江浙等初賽要求較嚴格的地區,只要錯一道讀程序題就凶多吉少了
- 讀程序要力求零失誤
戰術:
- 對於相對簡單相對短的程序,要認真計算,不能出現失誤
- 對於相對長、循環次數不少、遞歸結構較複雜(總之逐步手算很困難)的程序,要嘗試尋找規律
- 策略一:觀察程序的結構,弄清楚程序每一步都在幹什麼,推測 出程序最終要實現的功能
- 策略二:當不太容易一會兒看出功能時,也能夠考慮先按照程序手算上幾個來回,而且仔細觀察各項數據的變化規律,每每這個時候也容易發現一些規律。
- 注意
- 不要想固然!不要想固然!不要想固然! 必定要注意帶有必定功能的程序在一些細節上是否有變化。(不少時候一個小細節的變化,甚至可能致使整個程序功能發生重大變化)
- 仔細觀察輸入輸出的格式!
- 輸出到一行 or 輸出到多行?
- 是否存在修約?保留幾位小數?
- 是否存在場寬等特殊排版格式?
- …………
複習方法:
完善程序
分析:
- 不一樣於本身編寫程序,在完善程序題目中,咱們須要去嘗試理解別人的程序和別人的腦回路。
- 同時,按照近年來的套路,也經常是對一些基本算法思想的考察(算法基本功很重要!很重要!很重要!)。
- 此外,近年來,完善程序通常都會告訴選手所採用的算法,這必定程度上算是下降了難度。
在你有了基本的算法基礎以後,咱們能夠採起以下戰術:
- 對於沒有任何算法提示的題目,能夠先想想若是本身寫的話,會採起什麼樣的算法,使用什麼樣的數據結構。
- 對於有算法提示的題目,能夠先想想若是本身採用這一算法去寫這個題目的話,程序大概會是個怎樣的結構。
須要注意的點:
- 在句末,要注意看原程序是否有分號。若是必要時甚至能夠所有寫上分號(實際程序中,多個分號也是能夠運行的;可是少了分號將致使程序沒法運行)
- 必定要注意程序中是否有一些細節上的改動(部分關鍵位置上的細節變化可能致使整個填空方式大不同)
整體:
- 鞏固數據結構、算法、數學基本功(能夠說是整個NOI系列賽事中的重中之重)
- 充分了解計算機科學相關常識(在選擇題中所佔的比例仍是有一些的,同時對於之後有興趣在大學中繼續學習計算機相關專業的同窗,這些都是挺重要的專業常識)
- 多作題!多作題!多作題!(鍛鍊題感,熟悉通常的套路和解題技巧,作到臨危不亂)
好的以上就是這些,謝謝你們。
你們有什麼疑問的話能夠如今提出來。