天天看點

洛谷講課手稿

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題,多選第4、5題)

計算機行業的前沿技術新聞和CCF、NOIP相關的新聞(CCF官網、NOI官網)

計算機基礎知識計算題(2017提高組第2、3、4題)

多做題,了解一般性的計算機基礎知識

(重點)算法、資料結構、數學題(2017提高組第5、6、7、8、9、10、11、12、13、14、15,多選1、2、3題)(時間關系不在本節詳細講述)

那麼接下來,我來科普一些NOIP初賽選擇題常考的計算機基礎知識。

第一代計算機:電子管計算機(代表: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或者更高位數的情況)

還有一類初賽百考不厭的題型就是進制轉換

十進制轉化為其他進制

其他進制轉化為十進制

2^X進制與二進制之間的快速轉換(通過将每一位拆開,分别轉化為二進制再拼接即可,轉回來則為逆過程)

快速轉換的意義:對于有些比較多個不同進制下的數的大小的題目,我們可以将8、16進制的數快速轉化為2進制,10進制的數轉化為2進制,再在二進制下比較,這樣可以大大節省計算時間。

還有一類頻繁出現在卷子上的知識點就是數的表示法——原碼、反碼、補碼。

(均以8位二進制為例)

原碼

首位為符号位,0表示正,1表示負

後面的若幹位為數值位,表示數字的絕對值大小

特點

0有兩種表示法:1000000, 0000000

8位二進制原碼隻能表示255個不同的數

-128無法表示

反碼

後面的若幹位為數值位

當數字為_正數_時,和原碼一樣

數字為負數時,為絕對值的二進制取反

例如

127 -> 01111111

23 -> 00010111

-127 -> 10000000

-23 -> 11101000

0 -> 00000000

-0 -> 11111111

0有兩種表示法

8位二進制反碼隻能表示255個不同的數

補碼

後面的若幹位為數值為

數字為負數時,在反碼的基礎上+1

10000000表示-128

-127 -> 10000001

-23 -> 11101001

-128 -> 10000000

0隻有一種表示法

8位二進制補碼能表示256個不同的數

可以表示-128

對于負數運算,可以直接進行二進制加法運算,完美解決了負數運算的問題,故計算機中有符号整數類型一般都采用這一表示法

還有一類特别喜歡考的就是位圖(Bitmap)。

在X位色的位圖中,每個像素點的存儲将占用X個二進制位(Bit)

例如,灰階色(0-255黑白)的圖檔每個像素将占用8Bit(1位元組),32位色的圖檔每個像素将占用32Bit(4位元組)

在長寬分别為Width, Height的位圖中,将一共需要存儲Width * Height個像素點

綜上,在不考慮檔案頭檔案尾等存儲空間的情況下,位圖存儲空間為(Width * Height * X / 8)位元組(一般考試中問到的存儲空間指的也是這個)

平年、閏年:設年份為X,當年份滿足((X % 4 == 0) AND (X % 100 != 0)) OR (x % 400 == 0)時,該年為閏年,即2月有29天,一年有366天。否則為平年,2月僅有28天,一年365天。

馮諾依曼的貢獻:五大部件體系結構(控制器、存儲器、運算器、輸入輸出系統)、存儲程式工作原理、2進制

其他的一些計算機常識例如:

郵件協定,SMTP(簡單郵件傳輸協定)、IMAP(互動郵件通路協定)、POP3(郵局協定版本3)(2017年)

NOI是什麼意思?(全國青少年奧林匹克_競賽_)(2017年)

Microsoft Office的軟體有哪些(2016年)

大小寫鎖定,鍵盤操作(2016年)

輸入輸出裝置分類(即是輸入又是輸出的裝置:光驅、觸摸屏)

各種協定的中文全稱(TCP/IP,傳輸控制協定/網際協定;HTTP,超文本傳輸協定;FTP,檔案傳輸協定……)

A/B/C/D/E類IP位址

除此之外還考過很多其他的相關點。

是以給大家的建議是:

關注前沿計算機技術方面的新聞

關注CCF和NOI系列競賽政策類新聞

多做題,熟悉各類基本知識

考試時要敢猜

首先我們來看下問題求解都有哪些考察點:

數論

圖論

離散數學知識

問題求解類題目的特點:

方法很多樣,不太容易總結一般性的套路

觀察近年來的題目可以發現,答案數字大都不是很大。大部分題目,隻要足夠細心和耐心,都是可以暴力解決的

對于有些題目,不妨采用類似寫程式時采用的算法來解決

比如這樣一道例題:

是以說很多時候不要被限制住了思維。換個角度想問題,或者說用自己最熟悉的方式想問題才是上策。

複習方法:

多做題,熟悉一般排列組合題目的套組

算法和資料結構知識要做到活學活用

鍛煉細心和耐心

分析:

讀程式題一道題8分

意味着在江浙等初賽要求較嚴格的地區,隻要錯一道讀程式題就兇多吉少了

讀程式要力求零失誤

戰術:

對于相對簡單相對短的程式,要認真計算,不能出現失誤

對于相對長、循環次數很多、遞歸結構較複雜(總之逐漸手算很困難)的程式,要嘗試尋找規律

政策一:觀察程式的結構,弄清楚程式每一步都在幹什麼,推測 出程式最終要實作的功能

政策二:當不太容易一下子看出功能時,也可以考慮先按照程式手算上幾個來回,并且仔細觀察各項資料的變化規律,往往這個時候也容易發現一些規律。

注意

不要想當然!不要想當然!不要想當然! 一定要注意帶有一定功能的程式在一些細節上是否有變化。(很多時候一個小細節的變化,甚至可能導緻整個程式功能發生重大變化)

仔細觀察輸入輸出的格式!

輸出到一行 or 輸出到多行?

是否存在修約?保留幾位小數?

是否存在場寬等特殊排版格式?

多做題,鍛煉細心程度和手感

不同于自己編寫程式,在完善程式題目中,我們需要去嘗試了解别人的程式和别人的腦回路。

同時,按照近年來的套路,也常常是對一些基本算法思想的考察(算法基本功很重要!很重要!很重要!)。

此外,近年來,完善程式一般都會告訴選手所采用的算法,這一定程度上算是降低了難度。

在你有了基本的算法基礎之後,我們可以采取如下戰術:

對于沒有任何算法提示的題目,可以先想一想如果自己寫的話,會采取什麼樣的算法,使用什麼樣的資料結構。

對于有算法提示的題目,可以先想一想如果自己采用這一算法去寫這個題目的話,程式大概會是個怎樣的結構。

需要注意的點:

在句末,要注意看原程式是否有分号。如果必要時甚至可以全部寫上分号(實際程式中,多個分号也是可以運作的;但是少了分号将導緻程式無法運作)

一定要注意程式中是否有一些細節上的改動(部分關鍵位置上的細節變化可能導緻整個填空方式大不一樣)

總體:

鞏固資料結構、算法、數學基本功(可以說是整個NOI系列賽事中的重中之重)

充分了解計算機科學相關常識(在選擇題中所占的比例還是有一些的,同時對于以後有興趣在大學中繼續學習計算機相關專業的同學,這些都是挺重要的專業常識)

多做題!多做題!多做題!(鍛煉題感,熟悉一般的套路和解題技巧,做到臨危不亂)

好的以上就是這些,謝謝大家。

大家有什麼疑問的話可以現在提出來。