1. 程式人生 > >2009提高組初賽講解

2009提高組初賽講解

2009NOIP提高組初賽

題解 – by L_Y_T

一.單項選擇題

1.C

圖靈機

A.世界上最早的計算機是1946年美國的ENIAC

B&C&D.1936年,圖靈提出了一種新的計算模型—圖靈機

2.A

BIOS <==> “Basic Input Output System” ,基本輸入輸出系統

3.D

j的二進位制編碼為(74)10(74)_{10} = (4A)16(4A)_{16}

7416\frac{74}{16} = 4 … 10 , 416\frac{4}{16} = 0 … 4 , 所以16進位制就是4 10(A) 了

4.B

來下定義:

原碼:在用二進位制原碼錶示的數中 , 符號位為0 表示正數 , 符號位為1 表示負數 , 其餘各位表示數值部分 .

反碼:反碼的定義如下 : ⑴ 對於正數,它的反碼錶示與原碼相同。即 xx_反 = xx_原 ⑵對於負數,則除符號位仍為“ 1” 外,其餘各位“ 1” 換成” 0” ,**” 0” 換成1” **,即得到反碼 [X] 反。例如1101001-1101001_反=10010110 。

(3)對於0,00_反有兩種表示: +0+0_反=000…0 , 0-0_反 = 111…1 ;

補碼:正數的補碼就是該數本身

即 : [01100100][01100100]_補

00] = 01100100

負數:兩頭的1不變,中間取反

當然,你也可以用這個結論[x]=[x]+1[x]_補 = [x]_反 + 1

即:[10100100][10100100]_補 == 11011100

嗯…有一點注意一下:0只有一個補數

由補碼的定義可知:(1111111111101101)2(1111111111101101)_2 與其10進位制真值的關係為 $2^{16} + X = (1111111111101101)_2 $ ,解得: X=(216(1111111111101101)2X = - (2^{16}-(1111111111101101)_2

= (6553665517)=19-(65536-65517)=-19 .

5.m層滿k二叉樹有1km1k\frac{1-k^m}{1-k} 個節點,非葉節點有km1k^{m-1}個,葉節點有km1k^{m-1} 個,km1k^{m-1} = km1=1km11k(k1)+1k^{m-1} = \frac{1-k^{m-1}}{1-k} * (k-1)+1

6.字尾表示式的主要特點是左右根,根節點有表示符號,左右兩邊石獅子或數字

表示式有字首表示式,中綴表示式和字尾表示式

中綴表示式就是我們平常看的式子:舉個栗子:(3+4)56(3+4)*5-6 就是最普通的式子

字首表示式:運算子在運算元之前

我們把上面的式子轉一下:

將中綴表示式轉換為字首表示式步驟: 講解

(1) 初始化兩個棧:運算子棧S1S_1和儲存中間結果的棧S2S_2

(2) 從右至左掃描中綴表示式;

(3) 遇到運算元時,將其壓入S2S_2

(4) 遇到運算子時,比較其與S1S_1棧頂運算子的優先順序:

(414_1) 如果S1S_1為空,或棧頂運算子為右括號“)”,則直接將此運算子入棧;

(42_2) 否則,若優先順序比棧頂運算子的較高或相等,也將運算子壓入S1S_1

(434_3) 否則,將S1S_1棧頂的運算子彈出並壓入到S2S_2中,再次轉到(414_1)與S1S_1中新的棧頂運算子相比較;

(5) 遇到括號時:

(515_1) 如果是右括號“)”,則直接壓入S1S_1

(525_2) 如果是左括號“(”,則依次彈出S1S_1棧頂的運算子,並壓入S2S_2,直到遇到右括號為止,此時將這一對括號丟棄;

(6) 重複步驟(2)至(5),直到表示式的最左邊;

(7) 將S1S_1中剩餘的運算子依次彈出並壓入S2S_2

(8) 依次彈出S2中的元素並輸出,結果即為中綴表示式對應的字首表示式。

7.B

Huffman編碼不允許一個編碼是另一個的字首

8.A

這道題硬將也不行吧

9.A

prim演算法是指從起點開始,每次找與當前節點距離最短的節點進行擴充套件,已經被擴充套件的節點不在擴充套件

然而,我是直接看的克魯斯卡爾…所以prim我並不會

10.C

NOI官網

二.不定項選擇

11.AB Intel最早發明的是微處理器,位數只能說明處理的字長,所在的系統硬體不同,速度很難說誰快. 12.BD RAM的位置不是隨機,而是隨時訪問.快取記憶體和暫存器的物理實現是整合在CPU中. 13.BC 多工系統可以是單個CPU構架的,普通的PC都是多工的.而且作業系統不是都是免費的. 14.C 網路協議分層不是為了相容,而是根據網路的分層模型來的.新的IPv6是IPv4的升級.必須要有IP地址才能進入網際網路. 15.BD HTML沒有統一編碼.本網站頁面間也可以用超連結. 16.ABD 畫個圖就看出來了…嗯?!不用我畫吧!!..算了,我還是一畫吧!!.. 手繪圖…說實話怪醜 但是可以判斷,ABD是對的,C是錯的了吧… 17.AC 連結串列的常識題… 不會的話自己動手試試也行了… 18.ABC 按照題意,求出26%11=4(這裡的’='不是賦值) ,以此類推,得出那幾個數求出的"雜湊值"為4,3,6,5,8,7,4 . 5有可能為26,59. 7可能為36,38,72,59. 9有可能為26,38,72,18,8,59. 19.ABCD 希爾排序,快排,直接選擇排序,堆排都是不問定的 20.ACD 嗯…我咋感覺B項挺好的啊…

三.問題求解

1.432 可以看出有兩個DAG.(把圖片插過來先) T2 1一定是序列的第一個點,接下來是2和5,因為5後面沒有連線的數字,所以們先考慮2.然後是3,然後是4(或7),6要在4和7後,根據乘法原理1,2,3,4,6,7,只有2中派發,分別是1,2,3,4,7,61,2,3,4,7,61,2,3,7,4,61,2,3,7,4,6 吧5排在1的後面,共有6個位置,則有26=122*6=12 中.再講8和9插入其中,共有i=1n=8i\sum_{i=1}^{n=8}i種情況 原因嘛…畫個圖就知道了…但我不想畫 所以,共有1236=432 2.35 10015化成7進位制是(41125)7(41125)_7,正常是47+1=29張737^3面額的,1張727^2面額的,和2張717^1面額的,以及5張707^0面額的~~(我有毒吧)~~.這樣,我們可以找數值大於4的,並用7-a的方法來找零這樣,總數就是29+2+1+(1+7-5)=35張.

閱讀程式

1.這道題是一道gcd

2.模擬.tmp = 1 時,a,b的陣列的值分別為2,5,26,92和94,8,49,33.然後將每一位的各位相加後再相乘.

3.求楊輝三角的第n行.c[i][j]=c[i1][j1]+c[i1][j]c[i][j] = c[i-1][j-1]+c[i-1][j]

4.將分數化為小數.

ans : 3 , 5850 , 487 , 0.(384615)

完善程式

只提供答案 1. (1) 0 (2) ans == tmp + a[i] (3) <0 (4) i (5) tmp += a[i] 2. (1) now <= maxnum (2) second - first (3) (ans - 1) (4) hash[first] >= ans (5) ok (6) work(0) PS:答案不唯一(當然也有唯一的)