[Luogu 2580] 于是他错误的点名开始了

[Luogu 2580] 于是他错误的点名开始了

<题目链接>


不用好奇我为什么突然发水题题解…

突然觉得自己当年的幼儿园码风太幼稚,就试图把数据结构什么的用指针重写一遍…

想当年因为空间开太大而全 RE,调了一下午加一晚上。

指针就完全不用管空间,非常开心。

qwq.gif

#include <cstdio>
char s[60];
int n,m;
class Trie
{
	private:
		struct Node
		{
			bool end,vis;
			Node *c[26];
			Node(void):end(false),vis(false)
			{
				for(int i=0;i<26;++i)
					c[i]=nullptr;
			}
			~Node(void)
			{
				for(int i=0;i<26;++i)
					if(c[i]!=nullptr)
						delete c[i];
			}
		}*rt;
	public:
		Trie(void):rt(new Node){}
		~Trie(void)
		{
			delete rt;
		}
		void Insert(char* s)
		{
			Node *k=rt;
			for(int i=0,t;s[i];++i,k=k->c[t])
				if(k->c[t=s[i]-'a']==nullptr)
					k->c[t]=new Node;
			k->end=true;
		}
		const char* Search(char* s)
		{
			Node *k=rt;
			for(int i=0,t;s[i];++i,k=k->c[t])
				if(k->c[t=s[i]-'a']==nullptr)
					return "WRONG";
			if(!k->end)
				return "WRONG";
			if(k->vis)
				return "REPEAT";
			k->vis=true;
			return "OK";
		}
}*T=new Trie;
int main(int argc,char** argv)
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%s",s);
		T->Insert(s);
	}
	scanf("%d",&m);
	for(int i=1;i<=m;++i)
	{
		scanf("%s",s);
		puts(T->Search(s));
	}
	delete T;
	return 0;
}

谢谢阅读。

posted @ 2018-05-28 21:17  Capella  阅读(163)  评论(2编辑  收藏  举报

谢谢光临