l2-012 關於堆的判斷
思路:就是建立乙個堆,然後找是否滿足4個條件就好了。
觀察可知,這四個條件都是對座標關係的判斷,接下來我用pos(x)表示x在堆中的位置。
(1)x是根節點 :如果pos(x)== 1;
(2)x和y是兄弟節點 :pos(x)/2 == pos(y)/2;
(3)x是y的父節點:pos(x)== pos(y)/2;
(4)x是y的兒子節點:pos(x)/2 == pos (y);
注意:只滿足以上條件還不行,
還要注意輸入的格式,由於數字是區間[−10000,10000]內的,所以直接用字串getline輸入
的話還要判斷負數,比較麻煩,
由於每一句話的單詞數量基本一致,所以可以採用輸入不同字串的方式來記錄資料。
(一開始錯誤就是沒考慮負數)
#include#include#include#include#includeusing namespace std;
const int maxn = 100100;
int h[maxn]=,len=0,t1,t2;
map mp;
void ins(int x)
int main(void)
for(i=1;i<=len;i++) mp[h[i]]=i;
char ss[120],ch,s1[120],s2[120];
getchar();
while(m--)elseelse
}}else
} return 0;
}
PAT L2 012 關於堆的判斷 資料結構
題目本身不難,就是字串處理有點繁瑣。但是有個巨坑!就是你必須得邊push邊造堆,不能一次性讀完再造堆,兩者造出來的順序是不一樣的!為此改了十多遍 累覺不愛 這裡用了stl的make heap,自己手寫也可以,不怎麼長。include include include include include i...
L2 012 關於堆的判斷(小頂堆)
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...
L2 012 關於堆的判斷 插入建堆
堆函式 push heap a 1,a i 1 插入建堆函式,第三個引數可加 greater 小頂堆,預設大頂堆 push mack a 1,a n 1 用完整的資料建堆 注意的是,這題說的是已經有乙個堆,要插入。所以不能使用直接建堆的方法 建堆比較容易,字串有點點麻煩,仔細一點也可以的,字串有規律...