记录编号 67027 评测结果 AAAAAAAA
题目名称 [NOIP 2002]字串变换 最终得分 100
用户昵称 Gravatar老师好~~~ 是否通过 通过
代码语言 C++ 运行时间 4.435 s
提交时间 2013-08-07 10:37:26 内存使用 1.08 MiB
显示代码纯文本
#include<fstream>
#include<deque>
#include<string>
#include<cstdlib>
#include<set>
using namespace std;
ifstream fin("string.in");
ofstream fout("string.out");
deque<string> b;
string s1,s2;
int G=0;
class woca
{
public:
	string x;
	string y;
}a[100000];
class woqu
{
public:
	int x;
	string y;
};
set<woqu> ctr;
set<woqu>::iterator cp;
int K=1,co=1;
/*string flag[100000];*/
/*int e[100000];*/
bool operator<(woqu m,woqu n)
{
	if(m.y<n.y)
		return 1;
	else
		return 0;
}
bool operator==(woqu m,woqu n)
{
	if(m.y==n.y)
		return 1;
	else
		return 0;
}
void BFS()
{
	int l,s,i,k,m,jicun;
	string j;
	string temp;
	while(b.size()!=0)
	{
		j=b.at(0);
	    b.pop_front();
	    l=j.length();
	    for(i=1;i<=K;i++)
	  {
		s=a[i].x.length();
		for(k=0;k<=l-s;k++)
		{
			if(a[i].x==j.substr(k,s))
			{
 				temp=j.substr(0,k)+a[i].y+j.substr(k+s,l-k-s);
				woqu ttt,ttt1;
				ttt.y=temp;
				if(ctr.find(ttt)==ctr.end())
				{
			    b.push_back(temp);
				ttt1.y=j;
				cp=ctr.find(ttt1);//向平衡二叉树中查找父亲节点
				/*for(m=1;m<=co;m++)
				{
					if(flag[m]==j)
						jicun=e[m];
				}*/
				/*co++;
				flag[co]=temp;
				e[co]=jicun+1;*/
				co=(*cp).x+1;
				ttt.x=co;
				ctr.insert(ttt);//向平衡二叉树中插入元素
				if(co>10)
				{
					fout<<"NO ANSWER!";
					G=1;
					return;
				}
				if(temp==s2)
				{
			       fout<<co;
				   G=1;
			        return ;
				}
				}
			}
		}
	  }
	}
}
int main()
{
	int i;
	fin>>s1>>s2;
	while(!fin.eof())
	{
		fin>>a[K].x>>a[K].y;
		if(a[K].x.length()!=0&&a[K].y.length()!=0)
			K++;
	}
	K--;
	woqu ll;
	ll.y=s1;
	ll.x=0;
	b.push_back(s1);
	ctr.insert(ll);
	BFS();
	if(G==0)
		fout<<"NO ANSWER!"<<endl;
	return 0;
}