POJ 1521

简介: //Huffman树的构造就不赘述了,使用优先队列每次选择队头的两个数并将其出列,相加后将结果放入队列中,直到队列为空为止. #include #include #include #include #include #include using namespace st...
//Huffman树的构造就不赘述了,使用优先队列每次选择队头的两个数并将其出列,相加后将结果放入队列中,直到队列为空为止.
#include <iostream>
#include <queue>
#include <vector>
#include <string>
#include <iomanip>
#include <algorithm>
using namespace std;
int main()
{
    int i,j,k;
    string s;
    while(1)//cin遇到空格结束 
    {
        getline(cin,s);
        if(s=="END")
            break;
        priority_queue <int , vector <int>,greater<int> > q;
        sort(s.begin(),s.end());
        /*
        为什么要排序?
        因为下面用到的字符分类统计是和下一个比较,
        不相同就立马入队,若是相同的字符中间还有其他字符
        会被认作是不同字符,因为q.size()表示的是字符种类
        */ 
        int cnt=0;
        char ch = s[0];
        for(i=0;i<s.length();i++)//字符分类统计 
        if(s[i]==ch)
            cnt++;
        else
        {
            q.push(cnt);
            cnt=1;//因为执行到头了,i该自增了 
            ch=s[i];
        }
        q.push(cnt);//这句原来忘了
        int old_len = s.length()*8;
        int new_len = 0;
        //if(s.length()==1)
           // new_len = 1;
        if(q.size()==1)//上面的语句输入AAA时,只有一种字符,此时new_len=0 ,除数为0,竟然报wa,没报RE 
            new_len = q.top();      
        while(q.size()>1)
        {
            int a = q.top();
            q.pop();
            int b = q.top();
            q.pop();
            q.push(a+b);
            new_len += a+b;
        }
        q.pop();
        cout<<old_len<<" "<<new_len<<" "<<fixed<<setprecision(1)<<(double)old_len/new_len<<endl;
        //printf("%d %d %.1f\n",old_len,new_len,old_len*1.0/new_len);
    }
     return 0;
}
         
        
        
        
        

 

目录
相关文章
|
人工智能 机器学习/深度学习
|
测试技术
POJ 1001
此题用最朴素的思路实现即可,需模拟加法器,乘法器,最烦人的地方是特殊情形,如末位是小数点(12.^2=144,取小数点),整数末位是0(100^2=10000),0次幂,测试用例可能超出题目中说的范围,可能包含0次幂(100.0^0=0, 0.10^1=0.1)。
728 0
|
人工智能 BI
poj-3185-开关问题
描述   牛一行20他们喝的水碗。碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水)。他们希望所有20个水碗那么,因此用宽鼻子翻碗。   嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两端的情况下碗——两碗)。
784 0
poj-1008-玛雅历
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开始的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。
852 0
|
算法 机器人 编译器
POJ-2632
#include int main() { int k,a,b,n,m,i,j,num,rep,rect[100][100],robot[100][3]; int flag; char c; for(scanf("%d...
872 0