Pagini recente » Cod sursa (job #2557357) | Cod sursa (job #3146413) | Cod sursa (job #3254916) | Cod sursa (job #2299370) | Cod sursa (job #3261119)
#include<fstream>
using namespace std;
const int NMAX=2005;
long long Size[NMAX],code[NMAX];
int p[NMAX],len[NMAX];
int main()
{
ifstream fin("huffman.in");
ofstream fout("huffman.out");
ios_base::sync_with_stdio(false); fin.tie(0); fout.tie(0);
int n;
fin>>n;
int queue1l=0,queue1r=0,queue2l,queue2r;
for(;queue1r<n;++queue1r){
fin>>Size[queue1r];
}
queue2l=queue2r=queue1r;
long long total_len=0;
for(int iter=0;iter<n-1;++iter){
int min1,min2;
if(queue2l!=queue2r && (queue1l==queue1r || Size[queue2l]<=Size[queue1l]))
min1=queue2l++;
else min1=queue1l++;
if(queue2l!=queue2r && (queue1l==queue1r || Size[queue2l]<=Size[queue1l]))
min2=queue2l++;
else min2=queue1l++;
code[min2]=1;
total_len+=(Size[queue2r]=Size[min1]+Size[min2]);
p[min1]=p[min2]=queue2r++;
}
len[queue2l]=0;
for(int i=queue2l-1;i>=0;--i){
len[i]=len[p[i]]+1;
code[i]=(code[i]<<len[p[i]])|code[p[i]];
}
fout<<total_len<<'\n';
for(int i=0;i<n;i++)
fout<<len[i]<<' '<<code[i]<<'\n';
return 0;
}