这段代码的含义为:
>#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 5;
int val[maxn];
char ch[maxn];
int p[maxn], cnt;
int ql[maxn], head1, tail1;
int q2[maxn], head2, tail2;
int get(){
if (head1 > tail1){
return q2[head2++];
}
if (head2 > tail2){
return ql[head1++];
}
return val[ql[head1]] < val[q2[head2]] ? ql[head1++] : q2[head2++];
}
void newnode(int a, int b){
val[++cnt] = val[a] + val[b];
p[a] = p[b] = cnt;
ch[a] = '0';
ch[b] = '1';
q2[++tail2] = cnt;
}
int main(){
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++){
scanf("%d", &val[i]);
ql[i] = i;
}
cnt = n;
head1 = l;
tail1 = n;
head2 = 1;
for (int i = 1; i < n; i++){
int a = get(), b = get();
newnode(a, b);
}
for (int i = 1; i <= n; i++){
string ans;
for (int j = i; j != cnt; j = p[j]){
ans = ch[j] + ans;
}
cout << ans << '\n';
}
return 0;
}
求海明码
求格雷码
求哈夫曼编码
求Unicode编码