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++ 一天在看计算机的书籍的时候,看到了一个有趣的东西!每一串字符都可以被编码成一些数字来储存信息,但是不同的编码方式得到的储存空间是不一样的!并且当 ...
随机推荐
- 什么是CGI(Common Gateway Interface)?
参考: 1.Python CGI编程 2.十分钟搞懂CGI 3.CGI Made Really Easy
- MongoDB源码分析——mongod程序源码入口分析
Edit 说明:第一次写笔记,之前都是看别人写的,觉得很简单,开始写了之后才发现真的很难,不知道该怎么分析,这篇文章也参考了很多前辈对MongoDB源码的分析,也有一些自己的理解,后续将会继续分析其他 ...
- zoj 3686 A Simple Tree Problem (线段树)
Solution: 根据树的遍历道的时间给树的节点编号,记录下进入节点和退出节点的时间.这个时间区间覆盖了这个节点的所有子树,可以当做连续的区间利用线段树进行操作. /* 线段树 */ #pragma ...
- [DevExpress]DxValidationProvider分享
前些日子从研究所临时调回公司,帮忙做另外一个项目的控件验证工作,其实内容非常的简单,就是将用户即将提交至服务器的数据先做一个本地验证,以达到减少服务器压力.提高用户体验的目的. 附上一张图片 这是官方 ...
- 【转】JSONP简介
原文链接:说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 先说说JSONP是怎么产生的: 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面. ...
- sql的连接查询方式
1 SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中 ...
- Custom template tags and filters
Code layout Custom template tags and filters must live inside a Django app. If they relate to an exi ...
- Flume用来收集日志,zeppelin用来展示
Flume:Flume是一个分布式,可依赖的,用于高效率的收集.聚类.移动大量数据的服务.Flume使用基于流数据的简单而且可扩展的架构.由于拥有可调的依赖机制和许多故障恢复机制,Flume是健壮而且 ...
- C#中的反射 Assembly.Load() Assembly.LoadFrom()
一些关于C#反射的知识,估计也就最多达到使用API的程度,至于要深入了解,以现在的水平估计很难做到,所以下面此篇文章,以作为一个阶段的总结. 对于反射的总结,我想从以下几个方面展开,首先是反射程序集, ...
- NS实现采用的技术大多是PHP,如果采用java、 .net是否同样适用?
SNS采用的技术可不都是PHP (不局限于国内),特别是国外的新兴公司,基本上没有再用PHP的了,国内到还是蛮常用的.简单说说我知道的几个案例:Facebook (PHP):Facebook采用PHP ...