G - 二叉搜索树 HDU - 3791
注意2,4,8规律 4=2*2 6=3*2 7=3*2+1
//题解:把给的第一组例子构造成一个二叉搜索树
//接下来每一组样例都构造一下,比较后面的二叉搜索树和前面的是不是都一样
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
char s[13], tree0[103], tree1[103];
void insert(char tree[], int val)
{
int root = 1;//根设置为1;
while (tree[root] != '\0'){
if (val < tree[root]){
root <<= 1;//左子树乘2
}
else{
root <<= 1;
++root;//乘2再加一;
}
}
tree[root] = val;
}
int main()
{
int n;
while (scanf("%d", &n)&& n){
memset(tree0, 0, sizeof tree0);
scanf("%s", s);
for (int i = 0; s[i] != '\0'; ++i){
insert(tree0, s[i]);
}
for (int i = 0; i < n; ++i){
memset(tree1, 0, sizeof tree1);
scanf("%s", s);
for (int i = 0; s[i] != '\0'; ++i){
insert(tree1, s[i]);
}
if (memcmp(tree0, tree1, sizeof tree0) == 0){
printf("YES\n");
}
else
printf("NO\n");
}
}
return 0;
}