8 25 2016NOIP提高組初賽錯題整理

2021-10-23 19:21:53 字數 3938 閱讀 6950

第 8 題 (1.5 分) g 是乙個非連通簡單無向圖,共有 28 條邊,則該圖至少有( )個頂點。

非連通代表圖至少由兩部分組成,簡單說明圖沒有重邊和自環

為了使點數盡可能少

需要使邊盡可能密集

把乙個點孤立出來

剩下的連成完全圖

點數為n

nn的完全圖邊數為n(n

−1)2

\frac

2n(n−1

)​n (n

−1)2

=28

\frac=28

2n(n−1

)​=28n1

=8,n

2=−7

<0舍

去n1=8,n2=-7<0捨去

n1=8,n

2=−7

<0舍

去加上孤立的那個點

共計9個略略

第 27 題 (交朋友)根據社會學研究表明,人們都喜歡找和自己身高相近的人做朋友。 現在有 nn

名身高兩兩不相同的同學依次走入教室,調查人員想**每個人在走入教室的瞬間最想和已經進入教室的哪個人做朋友。當有兩名同學和這名同學的身高差一樣時,這名同學會更想和高的那個人做朋友。比如一名身高為

1.801.80 公尺的同學進入教室時,有一名身高為 1.79 公尺的同學和一名身高為 1.81公尺的同學在教室裡,那麼這名身高為 1.80 公尺的同學會更想和身高為 1.81

公尺的同學做朋友。對於第乙個走入教室的同學我們不做**。

由於我們知道所有人的身高和走進教室的次序,所以我們可以採用離線的做法來解決這樣的問題,我們用排序加鍊表的方式幫助每乙個人找到在他之前進入教室的並且和他身高最相近的人。

#include

using

namespace std;

#define maxn 200000

#define infinity 2147483647

int answer[maxn]

, height[maxn]

, previous[maxn]

, next[maxn]

;int rank[maxn]

;int n;

void

sort

(int l,

int r)}if

(i < r)

sort

(i, r);if

(l < j)

sort

(l, j);}

intmain()

sort(1

, n)

;for

(i =

1; i <= n; i++

)for

(i = n; i >=

2; i--

)for

(i =

2; i <= n; i++

) cout << i <<

":"<< answer[i]

;return0;

}

分析詳見注釋

題目答案

填空位置 ①:

i <= j//與此**前標記的i<=j保持一致
填空位置 ②:

next[rank[i]

]= rank[i+1]

//搭建鍊錶

填空位置 ③:

higher = height[next[i]

]- height[i]

//仿寫即可

填空位置 ④:

shorter < higher//優先選擇身高差小的
填空位置 ⑤:

previous[next[i]

]= previous[i]

//刪除最後乙個人,因為先進入的人無法選擇後進入的人為朋友

第 27 題 (交通中斷)有乙個小國家,國家內有 n座城市和 m 條雙向的道路,每條道路連線著兩座不同的城市。其中 11

號城市為國家的首都。由於**頻繁可能導致某乙個城市與外界交通全部中斷。這個國家的首腦想知道,如果只有第 i(i>1)

個城市因**而導致交通中斷時,首都到多少個城市的最短路徑長度會發生改變。如果因為無法通過第

i個城市而導致從首都出發無法到達某個城市,也認為到達該城市的最短路徑長度改變。

對於每乙個城市 i,假定只有第 i 個城市與外界交通中斷,輸出有多少個城市會因此導致到首都的最短路徑長度改變。

我們採用鄰接表的方式儲存圖的資訊,其中 head[x] 表示頂點 x 的第一條 邊的編號,next[i] 表示第 i 條邊的下一條邊的編號,

point[i] 表示第 i 條邊的終點,weight[i] 表示第 i 條邊的長度。

#include

#include

using

namespace std;

#define maxn 6000

#define maxm 100000

#define infinity 2147483647

int head[maxn]

, next[maxm]

, point[maxm]

, weight[maxm]

;int queue[maxn]

, dist[maxn]

, visit[maxn]

;int n, m, x, y, z, total =

0, answer;

void

link

(int x,

int y,

int z)

//相當於模板中的add函式*2

//用於建立無向邊

intmain()

for(i =

1; i <= n; i++

) dist[i]

= infinity;

___(

1)___ ;

queue[1]

=1; visit[1]

=1; s =1;

t =1;

// 使用 spfa 求出第乙個點到其餘各點的最短路長度

while

(s <= t)

} j = next[j];}

___(

3)___ ;

s++;}

for(i =

2; i <= n; i++

) j = next[j];}

s++;}

answer =0;

for(j =

1; j <= n; j++

) answer +=1

- visit[j]

; cout << i <<

":"<< answer -

1<< endl;

}return0;

}

模板題背熟就完事了

題目答案

填空位置 ①:

dist[1]

=0

填空位置 ②:

dist[x]

+ weight[j]

< dist[point[j]

]

填空位置 ③:

visit[x]

=0

填空位置 ④:

dist[x]

+ weight[j]

== dist[point[j]

]

填空位置 ⑤:

visit[point[j]]=

1

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...