题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3791
#include
#include
int main()
{
int i,j,t;
char s[22];
int tree[530];
int tree1[530];
while(scanf("%d",&t),t) {
scanf("%s",s);
memset(tree,-1,sizeof(tree));
//用数组来建立二叉树
for(i=0;s[i];i++) {
int c=s[i]-'0';
j=1;
while(tree[j]!=-1) {
if(c<=tree[j]) j=j*2;
else j=j*2|1;
}
tree[j]=c;
}
while(t--) {
scanf("%s",s);
memset(tree1,-1,sizeof(tree1));
for(i=0;s[i];i++) {
int c=s[i]-'0';
j=1;
while(tree1[j]!=-1) {
if(c<=tree1[j]) j=j*2;
else j=j*2|1;
}
tree1[j]=c;
}
//判断是否是同一颗二叉树
for(i=1;i<=512&&tree[i]==tree1[i];i++);
if(i>512) puts("YES");
else
puts("NO");
}
}
}
#include
#include
int main()
{
}