码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1503 Rank

时间:2015-04-24 09:14:52      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

哈夫曼树,优先队列

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 30+5
using namespace std;
string ans;
int sum[maxn];
priority_queue<int,vector<int>,greater<int> >mapp;
int main()
{
	while(cin>>ans)
	{
		if(ans=="END"){break;}
		memset(sum,0,sizeof(sum));
		while(mapp.size()) mapp.pop();
		for(int i=0;i<ans.size();i++)
		{
			if(ans[i]=='_') sum[0]++;
			else sum[ans[i]-'A'+1]++;
		}
		for(int i=0;i<=26;i++)
		{
			if(sum[i]) mapp.push(sum[i]);
		}
		int a=0,b=0;
		if(mapp.size()==1)
		{
			printf("%d %d %.1lf\n",ans.size()*8,ans.size(),double(8));
			continue;
		}
		while(mapp.size()>1)
		{
			int x=mapp.top();
			mapp.pop();
			int y=mapp.top();
			mapp.pop();
			mapp.push(x+y);
			a+=x+y; 
		}
		b=ans.size()*8;
		double c=double(b)/double(a);
		printf("%d %d %.1lf\n",b,a,c);
	}
	return 0;
} 


hdu 1503 Rank

标签:

原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/45226451

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!