時間限制
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
ftft
思路分析:
建堆,處理命令並判斷。
注意:1.通常給乙個序列建堆可以直接從n/2處倒著向下調整即可,但是本題這樣會錯誤,因為題目給的是插入序列,往空的小根堆中依次插入,因此建堆的過程就是乙個插入的過程,然後向上調整即可。
2.判斷命令處理值的關係時,可以設乙個pos陣列儲存各個數字的位置,這樣就不用迴圈確定位置,但是有乙個前提是堆中每個數字都不一樣。下述題解用了迴圈確定的方法,時間也滿足要求。
3.注意判斷命題時,要小心出現越界,如給的第乙個結點未葉節點,要判斷第二個數是否為其子結點時,2*k 與 2*k+1就會越界。
題解:
#include #include #include using namespace std;
const int maxn = 1001;
int n, m;
int heap[maxn];
char s1[20], s2[20], s3[20];
void upadjust(int low, int high)else break; }}
void create()
}int main()
} if(strcmp(s1, "is") == 0)elseelse if(strcmp(s2, "child") == 0)
}}else }
return 0;
}
L2 012 關於堆的判斷
題目如下 時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元...
L2 012 關於堆的判斷
題目 1.按題目要求先將傳進來的數按順序插入,每插入乙個新的元素就要從下向上調整,邊插入邊調整,不能全部插入後再從上到下調整。2.得到調整好的堆後,對輸入的指令字串進行分析,取出其中的數字,並判斷是題目所給的四類命題的哪一類 在這裡我採用按空格分幾個部分輸入字串的形式獲取字串中的數字 例如輸入 24...
L2 012 關於堆的判斷
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...