Strategic Game(哈夫曼编码,优先队列)

原题地址

#include
#include
#include
#include
using namespace std;
char str[500];
int cnt[260];
struct cmp
{
    bool operator()(int a,int b)
    {
        return a>b;
    }
};
priority_queue <int,vector<int>,cmp> q;
int main()
{
    while(scanf("%s",str)&&strcmp(str,"END"))
    {
        int l=strlen(str);
        memset(cnt,0,sizeof(cnt));
        for (int i=0;i<l;i++) cnt[str[i]]++;
        for(int i=0;i<260;i++)
        {
            if(cnt[i])
            {
                q.push(cnt[i]);
            }
        }
        int nl=0;
        if(q.size()==1) nl=l;
        while(q.size()>1)
        {
            int a=q.top();q.pop();
            int b=q.top();q.pop();
            q.push(a+b);
            nl+=(a+b);
        }
        q.pop();
        printf("%d %d %.1lf\n",8*l,nl,(double)(8*l)/(double)nl);
    }
    return 0;
}

你可能感兴趣的:(Strategic Game(哈夫曼编码,优先队列))