贡献了10多次WA。。终于找到错误了!!!
全局定义了a 数组,又在局部定义了啊!!!伤不起啊!!有木有啊!!找了一个上午的错啊!!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<string>
#define inf 0x7fffffff
#define maxn 100005
using namespace std;
char s[maxn];
typedef struct node
{
int w;
node *lc;
node *rc;
friend bool operator<(const node &n1,const node &n2)
{
return n1.w>n2.w;
}
}N;
priority_queue<node> q;
N huffman()
{
N cur,next,a,*p1,*p2;
cur=q.top();
q.pop();
while(!q.empty())
{
next=q.top();
q.pop();
p1=new N();
p2=new N();
p1->w=cur.w,p1->lc=cur.lc,p1->rc=cur.rc;
p2->w=next.w,p2->lc=next.lc,p2->rc=next.rc;
a.w=cur.w+next.w;
a.lc=p1;
a.rc=p2;
q.push(a);
cur=q.top();
q.pop();
}
return cur;
}
int deep(N *x,int d)
{
if(x->lc==NULL && x->rc==NULL)
return d * x->w;
else
return deep(x->lc,d+1)+deep(x->rc,d+1);
}
int main() {
freopen("in.txt","r",stdin);
while(scanf("%s",s)==1&&strcmp(s,"END")!=0)
{
int i,j,len;
len=strlen(s);
int a[35];
while(!q.empty())
q.pop();
memset(a,0,sizeof(a));
for(i=0;i<len;i++)
{
a[s[i]-'A']++;
}
N x;
j=0;
for(i=0;i<31;i++)
{
if(a[i]!=0)
{
x.w=a[i];
x.lc=NULL;
x.rc=NULL;
q.push(x);
j++;
}
}
if(j==1)
{
printf("%d %d 8.0\n",8*len,len);
continue;
}
else
{
N ans=huffman();
int sum=deep(&ans,0);
printf("%d %d %.1lf\n",8*len,sum,8.0*len/(double)sum);
}
}
return 0;
}