这道题就是对优先队列的应用。
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;
}