noip提高組復習


NOIP 提高組各種復習

一、初賽

  • NOI系列比賽支持語言

    根據國際信息學奧林匹克競賽(IOI)的相關決議並考慮到我國目前程序設計語言的具體情況,CCF決定:

    1.2020年開始,除NOIP以外的NOI系列其他賽事(包括冬令營、CTSC、APIO、NOI)將不再支持Pascal語言和C語言;

    2.從2022年開始,NOIP競賽也將不再支持Pascal語言。即從NOIP2022開始,NOI系列的所有賽事將全部取消Pascal語言;

    在無新增程序設計語言的情況下,NOI系列賽事自NOIP2022開始將僅支持C++語言。

  • 二進制相關

    1.二進制數的表示:

    • 有符號整數:\(n\)位2進制數中,第一位為符號位,0為正,1為負,后面\(n-1\)位表示數值,表示范圍為\(-2^{n-1}\) ~ \(2^{n-1}-1\)
    • 無符號整數:沒有符號位,表示范圍為\(0\) ~ \(2^n-1\)

    2.源碼、反碼、補碼:

    以下默認均為二進制數

    • 正數:
      • 源碼:數的二進制表示(有符號)
      • 反碼:與源碼相同
      • 補碼:與源碼相同
    • 負數:
      • 源碼:數的二進制表示(有符號)
      • 反碼:源碼除符號位外每位逐一取反
      • 補碼:反碼最后一位加一
    • 0:在計算機中,0的符號位為0,算入正數中

    3.c++中各種類型的表示范圍:

    int: \(-2^{31}\) ~ \(2^{31}-1\)

    unsigned int:\(0\) ~ \(2^{32}-1\)

    long long :\(-2^{63}\) ~ \(2^{63}-1\)

    unsigned long long : \(0\) ~ \(2^{64}-1\)

    4.常用位運算

    • 左移 << 和 右移>>:

      左移\(i\)位就是在原二進制數末尾添加\(i\)個0,右移\(i\)位就去掉原二進制數末尾\(i\)

      左移一位相當於乘2,右移一位相當於除以2

      e.g.\((11100)_2\)<<\(3=(11100000)_2\) \((11100)\)>>\(3=(11)_2\)

      \(x\)<<\(i\)=\(x^i\) \(x\)>>\(i\)=\(x\div2^i\)

      (p.s.下面列舉的幾種位運算的名稱和符號順序為中文名、英文名、計算機符號、數學符號)

    • 按位與 and & \(\wedge\)

      當兩個二進制數相同位上均為1時結果的這一位取1,否則取0

    ​ e.g.\((11100)_2\) & \((00101)_2 = (00100)_2\)

    ​ 通常用於二進制取位操作:二進制數\(x\)的第\(i\)位為\(x\)&\((1\)<<\(i)\)

    • 按位或 or | \(\vee\)

      當兩個二進制數相同位上有至少1個1時結果的這一位取1,否則取0

      e.g.\((11100)_2\) | \((00101)_2=(11101)_2\)

      通常用於將二進制數特定位上強制置1:將二進制數\(x\)的第\(i\)位置為1,結果為\(x\)|\((1\)<<\(i)\)

    • 按位異或 xor ^ \(\oplus\)

      當兩個二進制數相同位上數字不同是結果的這一位取1,否則取0

      e.g.\((11100)_2\)^\((00101)_2=(11001)_2\)

      所以可知兩次異或同一個數后結果不變,即\(a\)^\(b\)^\(b=a\)

      通常用於將二進制數特定位上取反:將二進制數\(x\)\(i\)位取反結果為\(x\)^\((1\)<<\(i)\)

      ​ 將二進制數\(x\)\(i\)~\(j\)位取反結果為\(x\)^\((((1\)<<\((j-i+1))-1)\)<<\(j)\)

    • 按位取反 not ~ :

      將二進制數逐位取反,0變1,1變0

      e.g.~\((11100)_2=(00011)_2\)

  • 計算機內存單位及換算

    1 B = 8b (b = bit 比特, B = Byte 字節)

    1 KB = 1024 B

    1 MB = 1024 KB = 1048576 B

    1 GB = 1024 MB

    1 TB = 1024 GB

    1 PB = 1024 TB

  • 各種排序及其時間復雜度、空間復雜度和穩定性

    穩定性:能否保證滿足同樣大小的數排序后按照原來的位置關系。如從小到大排序時,所有滿足\(a_i<a_j\)\(i<j\)的兩個數排序后仍滿足\(a_i\)\(a_j\)前面

    排序方法 時間復雜度 空間復雜度 穩定性
    快速排序 一般\(O(n log n)\),最壞情況下\(O(n^2)\) \(O(logn)\) 不穩定
    shell 排序(希爾排序) \(O(n^2)\) \(O(1)\) 不穩定
    堆排序 \(O(nlogn)\) \(O(1)\)(直接在原序列上建立堆) 不穩定
    選擇排序 \(O(n^2)\) \(O(n)\) 不穩定
    歸並排序 \(O(nlogn)\) \(O(n)\) 穩定
    基數排序 \(O(n)\) \(O(n)\) 穩定
    插入排序 \(O(n^2)\) \(O(n)\) 穩定
    冒泡排序 \(O(n^2)\) \(O(1)\) 穩定
  • 編程思想:

    • 面向過程:是一種以過程為中心的編程思想。“面向過程”也可稱之為“面向記錄”編程思想,他們不支持豐富的“面向對象”特性(比如繼承、多態),並且它們不允許混合持久化狀態和域邏輯。

      面向過程的編程語言有:C, Fortan, Pascal,匯編語言

    • 面向對象:是一種以事物為中心的編程思想。

      比如以公共汽車而言。“面向過程”就是汽車啟動是一個事件,汽車到站是另一個事件。在編程序的時候我們關心的是某一個事件。而不是汽車本身。我們分別對啟動和到站編寫程序。類似的還有修理等等。

      面向對象的編程語言有:C++, Java, Python

  • 計算機方面的獎項:圖靈獎,CCF 王選獎

  • 各種學會、比賽的簡稱及其對應全稱:

    • 中國計算機學會 CCF
    • 全國青少年信息學奧林匹克聯賽 NOIP
    • 全國青少年信息學奧林匹克競賽 NOI
  • 圖片格式:gif, jpeg, png

  • 視頻格式:mp4, avi, wmv, rmvb, mkv 等等

  • 音頻格式:mp3, ape

  • 哈夫曼(Huffman)算法相關:

    • 哈夫曼算法采取的是貪心的思想
    • 哈弗慢樹中葉子節點個數比非葉子節點個數多1

二、復賽

  • 卡特蘭數:

    • 簡單介紹:

      \(n\)個卡特蘭數 \(C(n)=C(0)\times C(n-1)+C(1)\times C(n-2)+\cdots+C(n-1)\times C(0)\)

      它的通項公式為 \(C(n)=C^n_{2n}-C^{n+1}_{2n}=\frac{C^{2n}_n}{n+1}\)證明

    • 應用:

      \(n\)個節點的二叉樹的形態有\(C(n)\)

      \(n\)個數出棧入棧的順序有\(C(n)\)

      \(n\)對括號的匹配方式有\(C(n)\)

      \(n\)邊型切割成若干個小三角形共有\(C(n)\)

      將一個含有\(n\)個數的乘法式子括號化,使其最后表示為兩個東西相乘的形式(e.g.\((1\times2)\times(3\times4)\)\((1)\times((2\times3)\times4)\)都是將\(1\times2\times3\times4\)括號化的結果之一),有\(C(n)\)種括號化的方式

      \(\cdots\)

  • 常見博弈

    • Bash Game 巴什博弈

      有一堆石子共有\(n\)個。A B兩人輪流取,A為先手。每次最少取1顆,最多取\(k\)顆,拿到最后1顆石子的人獲勝。假設A B都非常聰明,拿石子的過程中不會出現失誤。給出\(n\)\(k\),求先手是否有必勝策略。

      結論:當\(n\%(k+1)==0\)時先手必敗,否則先手必勝

      證明:\(n\)可以表示為\(n=x(k+1)+y\)

      \(1^\circ\) \(y=0\)

      ​ 若先手取\(a\)顆,則后手取\(k+1-a\)

      ​ 此種情況下后手必勝,先手必敗

      \(2^\circ\) \(y\neq 0\)

      ​ 先手第一輪先取走\(y\)

      ​ 以后后手取\(b\)顆,先手在下一輪取\(k+1-b\)

      ​ 此時先手必勝,后手必敗

      ​ 綜上,當\(n\%(k+1)==0\)時先手必敗,否則先手必勝

      相關題目:hdu2188 hdu1846

    • Nim Game 尼姆博弈

      \(n\)堆石子,每堆分別有\(a_1,a_2,a_3,\dots,a_n\)個,兩個人輪流從某一堆取任意多石子,每次至少取一個,可以取完,最后取光者勝。問先手是否有必勝策略。

      結論:當\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_n=0\)時,先手必勝,否則必敗

      證明: 首先,對於這個博弈,有以下幾個性質存在:

      ​ (1) 無論如何取都取成必勝狀態的狀態為必敗狀態

      ​ (2) 無論如何取都取成必敗狀態的狀態為必勝狀態

      ​ (3) 最終無法取石子的狀態為必敗狀態

      ​ 所以,要證明這個博弈的結論,只需要證明下面這三個東西對於這個結論成立:

      \(1^\circ\) 最終的狀態為必敗狀態

      ​ 最終狀態全部石子堆中都為0個石子,異或后結果為0,成立

      \(2^\circ\) 必敗狀態一定能通過取一次石子變為必勝狀態

      ​ 不妨設有一個狀態\((a_1,a_2,a_3,\dots,a_n)\)滿足\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_n=k\)

      ​ 則一定存在一個\(a_i\)\('\)可以替換\(a_i\)使得\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_i\)\('\)^\(\cdots\)^\(a_n=0\)

      ​ 那么此時\(a_i\)\('\)的二進制最高位與\(k\)的二進制最高位相同

      ​ 又因為\(a_i\)^\(k<a_i\)一定成立 所以替換\(a_i\)\(a_i\)\('=a_i\)^\(k\)

      ​ 此時\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_i\)\('\)^\(\cdots\)^\(a_n=0\)

      ​ 所以此時取的石子數量為\(a_i-a_i\)\('\)

      \(3^\circ\) 必勝狀態通過取一次石子不能變為必勝狀態

      ​ 即 若狀態(\(a_1,a_2,a_3,\dots,a_n\))滿足\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_n=0\),則一定不存在一種合法的移動將\(a_i\)改為\(a_i\)\('\)后同樣滿足\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_i\)\('\)^\(\cdots\)^\(a_n=0\)

      ​ 因為此時\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_n=\)\(a_1\)^\(a_2\)^\(a_3\)^\(\cdots\)^\(a_i\)\('\)^\(\cdots\)^\(a_n\)

      ​ 所以\(a_i=a_i\)\('\)

      ​ 即沒有取任何石子,不滿足要求,所以\(3^\circ\)成立

      相關題目:poj1704

    • Wythoff Game 威佐夫博弈

      有兩堆各有\(a,b\)個物品,兩個人輪流從任一堆取至少一個或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最后取光者得勝。問先手是否有必勝策略。

      結論:不妨設\(a<b\).令\(k=b-a\),當\(a,b\)滿足\(a=\lfloor\frac{k(1+\sqrt{5})}{2}\rfloor\),\(b=a+k\)時,先手必敗,否則先手必勝

  • 平面幾何

    • 矩形相交面積

      例題:[hdu2056]有兩個矩形,給定兩個矩形對角線上的兩個端點坐標,求兩矩形相交部分面積

      ​ 假定已知的端點都是左上角和右下角(輸入給的是對角線上的端點,可能是左上角和右下角,也可能是左下角和右上角,可以互相轉化)

      \(1^\circ\)兩矩形不相交

      ​ 此時位於上方的矩形的最小縱軸坐標大於位於下方的矩形的最大縱軸坐標,位於左方的矩形的最大橫軸坐標小於位於右方的矩形的最小橫軸坐標

      ​ 特判這種情況,輸出\(0.00\)(注意題目要求,要保留兩位小數)

      \(2^\circ\)兩矩形相交

      ​ 顯然兩矩形相交部分一定也是一個矩形

      ​ 相交形成的這個矩形:左上角坐標:橫軸:原來兩個矩形左上角坐標中橫軸坐標較大的那個

      ​ 縱軸:原來兩個矩形左上角坐標中縱軸坐標較小的那個

      ​ 右下角坐標:橫軸:原來兩個矩形右下角坐標中橫軸坐標較小的那個

      ​ 縱軸:原來兩個矩形右下角坐標中縱軸坐標較大的那個

      ​ 設求得的相交形成的矩形的左上角坐標為\((x_1,y_1)\),右下角坐標為\((x_2,y_2)\)

      ​ 則相交部分的面積\(S=(x_2-x_1)\times(y_2-y_1)\)

      ​ 總結:注意細節:題目給定的對角線沒有說是主對角線還是副對角線,需要轉換;特判不相交時輸出\(0.00\)要保留兩位小數

    • 向量

      這里不贅述,只是簡單講一下,有興趣可以百度深究向量

      • 一些定義:1)標量:只有大小,沒有方向的量(如長度、面積等)

        ​ 2)向量:既有大小,也有方向的量(如力,速度等)

        ​ 3)以\(A\)為起點,\(B\)為終點的向量記作\(\vec{AB}\);向量可以用單個小寫字母表示如\(\vec{a}\)

        ​ 4)可以將起點為原點,終點為\((x,y)\)的向量\(\vec{a}\)記作\(\vec{a}=(x,y)\)

        ​ 4)向量的長度(也稱作模)記作\(|\vec{AB}|\)

        ​ 5)零向量:長度為\(0\)的向量

        ​ 單位向量:長度為\(1\)個單位的向量

        ​ 6)平行向量、共線向量:方向相同或相反的非零向量

        ​ 相等向量:長度相等且方向相同的向量

        ​ 相反向量:與\(\vec{a}\)長度相等、方向相反的向量稱作\(\vec{a}\)的相反向量

      • 基本運算:假設有兩個向量\(\vec{a}=(x_1,y_1)\)\(\vec{b}=(x_2,y_2)\)

        ​ 1)加法:\(\vec{a}+\vec{b}=(x_1+x_2,y_1+y_2)\)

        ​ 2)減法:\(\vec{a}-\vec{b}=(x_1-x_2,y_1-y_2)\)

        ​ 3)乘法:向量乘法分兩種,分別是內積和外積

        ​ 內積的結果是一個實數,外積的結果是一個向量

        ​ 內積:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM