记录编号 311617 评测结果 AAAAAAAAAA
题目名称 [Youdao2010] 有道搜索框 最终得分 100
用户昵称 Gravatar森林 是否通过 通过
代码语言 C++ 运行时间 0.150 s
提交时间 2016-09-24 20:23:10 内存使用 101.28 MiB
显示代码纯文本
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iomanip>
#include<functional>
#include<queue>
#include<stack>
#include<map>
#define WJ(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define JW fclose(stdin);fclose(stdout);
using namespace std;
const int maxnode=1000000;
const int sigma_size=26;
struct Trie{
	int ch[maxnode][sigma_size],sz,tot;
	string st;
	bool val[maxnode];
	Trie(){
		sz=1;
		val[sz]=0;
		memset(ch[1],0,sizeof(ch[1]));
	}
	inline int idx(const char& c){
		if(c>='A'&&c<='Z')return c-'A';
		else return c-'a';
	}
	void insert(char *s/*,int v*/){
		int u=0;
		for(int i=0;s[i];++i){
			int c=idx(s[i]);
			if(!ch[u][c]){
				sz++;
				memset(ch[sz],0,sizeof(ch[sz]));
				val[sz]=0;
				ch[u][c]=sz;
			}
			u=ch[u][c];
		}
		val[u]=1;
	}
	inline bool query(char *s){
		int u=0;
		for(int i=0;s[i];++i){
			int c=idx(s[i]);
			if(!ch[u][c])return 0;
			u=ch[u][c];
		}
		return val[u];
	}
	inline void dfs(const string& s,const int& u){
		if(tot==8)return;
		if(val[u])tot++,cout<<s<<' ';
		for(int i=0;i<26;i++)
			if(ch[u][i])dfs(s+char(i+'a'),ch[u][i]);
	}
	inline bool find(char *s){
		tot=0;st="";
		int u=0;
		for(int i=0;s[i];++i){
			int c=idx(s[i]);
			if(!ch[u][c])return 0;
			st+=s[i];
			u=ch[u][c];
		}
		dfs(st,u);
		return tot;
	}
};
Trie a;
int main(){
	#define submit
	#ifdef submit
	WJ(youdao);
	#endif
	char str[maxnode];int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%s",str);
		a.insert(str);
	}
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%s",str);
		if(!a.find(str))printf("%s\n",str);
		else putchar(10);
	}
	JW;
	return 0;
}