洛谷講課手稿

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題)
    • 計算機行業的前沿技術新聞和CCF、NOIP相關的新聞(CCF官網NOI官網
  • 計算機基礎知識計算題(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)。

位圖

  • 在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系列賽事中的重中之重)
  • 充分了解計算機科學相關常識(在選擇題中所佔的比例仍是有一些的,同時對於之後有興趣在大學中繼續學習計算機相關專業的同窗,這些都是挺重要的專業常識)
  • 多作題!多作題!多作題!(鍛鍊題感,熟悉通常的套路和解題技巧,作到臨危不亂)

好的以上就是這些,謝謝你們。

你們有什麼疑問的話能夠如今提出來。

相關文章
相關標籤/搜索