POJ 1251

来源:互联网 发布:apache ant linux 编辑:程序博客网 时间:2024/05/21 10:55

    这道题就是对优先队列的应用。

    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;}


0 0