HDU-2527 Safe Or Unsafe
http://acm.hdu.edu.cn/showproblem.php?pid=2527
建哈夫曼树,哈夫曼编码,求wpl值。
Safe Or Unsafe
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1511 Accepted Submission(s): 594
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct node
{
char ch;//节点值
int weight;//权重
int parent;//双亲节点
int lchild,rchild;//孩子节点
}ht[];
struct Hcode
{
char cd[];//存入01编码的字符串。
int start;//长度的开始。
}hcd[];
void creat(node ht[],char *c,int *w,int n)//建哈夫曼树。
{
int i,s1,s2,k,min1,min2;
for(i=;i<=n;i++)//初始化叶子节点
{
ht[i].ch=c[i-];//字符。
ht[i].weight=w[i-];//权值
ht[i].parent=ht[i].lchild=ht[i].rchild=;//开始为0.
}
for(;i<*n;i++)//树的节点一共为2*n-1个。
{
ht[i].parent=;
ht[i].lchild=;
ht[i].rchild=;
}
for(i=n+;i<*n;i++)
{
min1 = min2 = ;
for(k=;k<=i-;k++)//求权值最小的2个权值。
if(ht[k].parent == )
{
if(ht[k].weight<min1)
{
min2 = min1;
s2= s1;
min1= ht[k].weight;
s1= k;
}
else if(ht[k].weight<min2)
{
min2 = ht[k].weight;
s2 = k;
}
} ht[s1].parent=i;//建立节点。
ht[s2].parent=i;
ht[i].lchild=s1;
ht[i].rchild=s2;
ht[i].weight=ht[s1].weight+ht[s2].weight; } }
void creatHcode(node ht[],Hcode hcd[],int n)//哈夫曼编码。
{
int i,f,c;
Hcode hc;
for(i=;i<=n;i++)
{
hc.start=n;
c=i;
f=ht[i].parent;
while(f!=)
{
if(ht[f].lchild==c)
hc.cd[hc.start--]='';
else
hc.cd[hc.start--]='';
c=f;
f=ht[f].parent;
}
hc.start++;
hcd[i]=hc;
}
}
int main()
{
int T,m,i,r,j;
int w[];
char str[],c[];
scanf("%d",&T);
while(T--)
{
memset(w,,sizeof(w));
scanf("%d",&m);
getchar();
scanf("%s",str);
int len=strlen(str);
r=;
c[r++]=str[];
w[]=;
for(i=;i<len;i++)
{
for(j=;j<r;j++)
{
if(c[j]==str[i])
{
w[j]=w[j]+;
break;
}
}
if(j==r)
{ w[r]=;
c[r++]=str[i];
}
}
c[r]='\0';
if(r==)
{
if(w[]<=m)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
continue;
}
creat(ht,c,w,r);
creatHcode(ht,hcd,r);
int wpl=;
for(i=;i<=r;i++)
{
wpl+=(r-hcd[i].start+)*ht[i].weight; }
if(wpl<=m)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return ;
}
HDU-2527 Safe Or Unsafe的更多相关文章
- hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 2527 Safe Or Unsafe (优先队列实现Huffman)
Safe Or UnsafeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...
- HDU 2527
题目描述 HDU 2527 分析 霍夫曼编码的应用. 本题没有必要构造一棵完整的霍夫曼树.只需利用霍夫曼编码的原理,每次挑选频率最低的两个元素进行合并 ...
- Safe Or Unsafe(hdu2527)哈弗曼VS优先队列
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 1053 & HDU 2527 哈夫曼编码
http://acm.hdu.edu.cn/showproblem.php?pid=1053 #include <iostream> #include <cstdio> #in ...
- HDU 3350 #define is unsafe
题目大意:给定一个只含有MAX和+操作的式子,求加法运行了多少次,其中MAX使用宏定义. 题解:注意一个规律,对于MAX(A,B)其中A中加a次,B中加b次若A>B,则加a*2+b次,否则a+b ...
- HDU2527:Safe Or Unsafe(哈弗曼树)
Problem Description Javac++ 一天在看计算机的书籍的时候,看到了一个有趣的东西!每一串字符都可以被编码成一些数字来储存信息,但是不同的编码方式得到的储存空间是不一样的!并且当 ...
随机推荐
- 销毁session
session运行在服务器是单用户,每个session都有一个唯一的sessionid 用法:session.setAttribute("userName", "张三丰& ...
- stack around the variable “XX” was corrupted
晚上花了几个小时fix了这个恼人的BUG!“在变量XX周围的堆栈已损坏” 在网上找到的解释是: 把“project->配置属性->c/c++->代码生成->基本运行时检查 设置 ...
- Java Lambda简明教程(一)
Lambda表达式背景 许多热门的编程语言如今都有一个叫做lambda或者闭包的语言特性,包括比较经典的函数式编程语言Lisp,Scheme,也有稍微年轻的语言比如JavaScript,Python, ...
- 设计模式之 Factory Method 工厂方法
看到的比较有意思的一篇描述工厂方法的文章. http://www.codeproject.com/Articles/492900/From-No-Factory-to-Factory-Method 总 ...
- 四层运维工具nc
nc命令全名为netcat,顾名思义就是通过TCP或UDP从网络读写数据. 很多事情不一定非得抓包,nc也能发挥巨大作用. 1.传输文件 使用<>重定向符(只适用单文件,不推荐.失 ...
- nginx 显示discuz页面
我也不知道我题目表述的对不对.我也是刚学习. 安装nginx 显示discuz的界面.我看了好几次视频,也没发现哪的问题.就是一直出现502的错误代码 我又重新查了几次.觉得需要注意一下几点: 1,关 ...
- php PHP_EOL 常量
换行符 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 <?php echo PHP_EOL; //win ...
- C# Linq To DataTable 分组统计 DEMO
DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate); var querySum = from t in dt.AsEnum ...
- 支付宝开发(一)-认识php openssl RSA 非对称加密实现
获取支付宝公钥 本地服务器生成私钥和公钥 运用php中openssl相关函数加密解密验证身份 以下是php中openssl相关函数实现的验证,来自php官方demo //需要签名的数据 $data = ...
- 商务通简单弹窗样式 V1.0
代码为: document.writeln('<style>*{margin:0; padding:0;}</style>');//创建中间弹框 document.wri ...