二叉搜尋樹:左子樹比根小,右子樹比根大,中序遍曆會得出有序序列。
#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<<11char 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;}