二叉搜索树:左子树比根小,右子树比根大,中序遍历会得出有序序列。
#include <map>
#include <set>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <time.h>
#include <cstdio>
#include <math.h>
#include <iomanip>
#include <cstdlib>
#include <limits.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define LL long long
#define MIN INT_MIN
#define MAX INT_MAX
#define PI acos(-1.0)
#define FRE freopen("input.txt","r",stdin)
#define FF freopen("output.txt","w",stdout)
#define N 1<<11
char a[N],b[N];
char str[11];
void gao(char c,int pos, char *s) {
int i;
if (s[pos] == '*'){
s[pos] = c;
return ;
}
if (c < s[pos]){
gao(c, pos<<1,s);
}
else if (c > s[pos]) {
gao(c, (pos<<1)+1,s);
}
}
int main(){
int n;
while (scanf("%d",&n) && n) {
int i,j;
scanf("%s",str);
memset(a,'*',sizeof(a));
int len = strlen(str);
for (i = 0; i < len; i++) {
gao(str[i], 1, a);
}
a[N-1] = '\0';
while (n--) {
memset(b,'*',sizeof(b));
scanf("%s",str);
len = strlen(str);
for (i = 0; i < len; i++) {
gao(str[i], 1, b);
}
b[N-1] = '\0';
if (!strcmp(a,b))puts("YES");
else
puts("NO");
}
}
return 0;
}