L2 012 關於堆的判斷

2021-07-14 20:49:01 字數 1299 閱讀 1555

題目如下:

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種:

輸入格式:

每組測試第1行包含2個正整數n(<= 1000)和m(<= 20),分別是插入元素的個數、以及需要判斷的命題數。下一行給出區間[-10000, 10000]內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個命題。題目保證命題中的結點鍵值都是存在的。

輸出格式:

對輸入的每個命題,如果其為真,則在一行中輸出「t」,否則輸出「f」。

輸入樣例:

5 4

46 23 26 24 10

24 is the root

26 and 23 are siblings

46 is the parent of 23

23 is a child of 10

輸出樣例:
ftf

t

其實這道題重點就是建樹,用前面那個實現堆的結構的建樹模板就可以,後面判斷時只要根據每個數在陣列的下標來計算判斷就ok了,

但是需要記錄每個節點的下標,剛開始我用的陣列來記錄,提交只過了乙個案例,後來發現節點還可以是負數,這時就不能用陣列來記

錄,於是換成了map,鍵為節點數值,值為下標,就可以了。

#include#include#include#include#includeusing namespace std;

int n, a[1005];

//建樹的 「模板」

void up( int son )

a[tson] = t;

}void charu( int t)

int main ()

//給map賦值

for(int i=1; i<=n; i++)

for(int i=0; i> x;

cin >> s;

int index_x = index[x];

int index_y;

if(s[0] == 'a')

else

else if(s[0] == 'p')

else}}

return 0;

}

L2 012 關於堆的判斷

題目 1.按題目要求先將傳進來的數按順序插入,每插入乙個新的元素就要從下向上調整,邊插入邊調整,不能全部插入後再從上到下調整。2.得到調整好的堆後,對輸入的指令字串進行分析,取出其中的數字,並判斷是題目所給的四類命題的哪一類 在這裡我採用按空格分幾個部分輸入字串的形式獲取字串中的數字 例如輸入 24...

L2 012 關於堆的判斷

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...

L2 012 關於堆的判斷

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...