nyoj801 Haffman編碼 優先佇列實現

2021-07-09 04:38:21 字數 1429 閱讀 5592

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:3 描述

哈弗曼編碼大家一定很熟悉吧(不熟悉也沒關係,自己查去。。。)。現在給你一串字元以及它們所對應的權值,讓你構造哈弗曼樹,從而確定每個字元的哈弗曼編碼。當然,這裡有一些小規定:

1.規定哈弗曼樹的左子樹編碼為0,右子樹編碼為1;

2.若兩個字元權值相同,則ascii碼值小的字元為左孩子,大的為右孩子;

3.建立的新節點所代表的字元與它的左孩子的字元相同;

4.所有字元為ascii碼表上32-96之間的字元(即「 」到「`」之間的字元)。

輸入

輸入包含多組資料(不超過100組)

每組資料第一行乙個整數n,表示字元個數。接下來n行,每行有乙個字元ch和乙個整數weight,表示字元ch所對應的權值,中間用空格隔開。

輸入資料保證每組測試資料的字元不會重複。

輸出對於每組測試資料,按照輸入順序輸出相應的字元以及它們的哈弗曼編碼結果,具體格式見樣例。

樣例輸入

3

a 10

b 5c 8

4a 1

b 1c 1

d 1

樣例輸出

a:0

b:10

c:11

a:00

b:01

c:10

d:11

**原創

上傳者tc_黃平

我真是日了狗了。。。

一直想著出題人不會出n=0的情況把。一直也就沒判斷,wa了一夜。今天檢查錯誤

一直沒發現。就加上n=0 結果ac了。坑坑坑啊、、、

/*8a 5

b 29

c 7d 8

e 14

f 23

g 3h 11

*/#include #include #include #include using namespace std;

struct node

}tree[200];

int n;

//str字串為存貯huffman編碼

char str[100];

//對所有的huffman書按照序號排列

bool cmp(node a,node b)

//優先佇列裡面剩下乙個元素,它就是根節點,直接加到樹中

tree[t++]=s.top();

s.pop();

//按照num序號排序

sort(tree,tree+t,cmp);

//取消下面的注釋,可以看到每個節點的序號,父節點,左子樹,右子樹,權值。

// for(int i=0;i

青藤 801 經典 N皇后問題

題目描述 在一張nn的西洋棋棋盤上,放置n個皇后,使得所有皇后都無法互相直接攻擊得到,皇后可以直接攻擊到她所在的橫行,數列,斜方向上的棋子 現在輸入乙個整數n,表示在的nn棋盤上放n個皇后,請輸出共有多少種使得所有皇后都無法互相直接攻擊得到的方案數。例如下面這樣的擺法,是4皇后的乙個解 1代表有皇后...

windows環境下安裝MySQL8 0 19

mysqld 設定3306埠 port 3306 設定mysql的安裝目錄 basedir d mysql 8.0.19 設定mysql資料庫的資料的存放目錄 datadir d mysql 8.0.19 data 允許最大連線數 max connections 200 允許連線失敗的次數。這是為了...

AOJ 801 熱身之蘸醬吃

time limit 1000 ms case time limit 1000 ms memory limit 64 mb total submission 108 submission accepted 50 description 在acm實驗室裡有n個士多啤梨,編號依次為1到n,重量依次為w ...