您的位置:首页 > 其它

POJ 1251

2016-05-24 16:41 351 查看
这道题就是对优先队列的应用。

huffman+priority_queue

#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

int main()
{
string in;
int count[200]; //count the character
while(cin>>in&&in!="END"){
memset(count,0,sizeof(count));
for(int i=0;i<in.length();i++){
count[in[i]]++;
}

//the priority queue
priority_queue<int,vector<int>,greater<int> >que;

for(int i=0;i<200;i++){
if(count[i]!=0){
que.push(count[i]);
}
}

int len=in.length(),sum=0;
while(que.size()>1){
int a=que.top();que.pop();
int b=que.top();que.pop();
sum+=(a+b);
que.push(a+b);
}

if(sum==0){//sum==0 means just one character
sum=len;
}

printf("%d %d %.1f\n",8*len,sum,double(8*len)/sum);

//clear the que
while(!que.empty()) que.pop();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: