记录编号 110834 评测结果 AAAAAAAA
题目名称 [暑假培训2012] 寻找国都名 最终得分 100
用户昵称 Gravatarslyrabbit 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2014-07-12 15:21:57 内存使用 0.34 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
class country
{
public:
	string str;
	int xans,yans;
	int ans[101];
	bool t;
	void f()
	{
		t=0;
	}
};
country sly[20];
int m,n,k;
char a[101][101];
bool b[101][101]={0};
int r1[9]={0,1,-1,0,0,-1,1,1,-1};
int r2[9]={0,0,0,1,-1,1,-1,1,-1};
void work(int x,int y,int j,int p)
{
	b[x][y]=1;
	if(j==sly[p].str.length())
	{
		sly[p].t=true;
		return;
	}
	for(int i=1;i<=8;i++)
	{
		if((x+r2[i]>=1&&x+r2[i]<=m)&&(y+r1[i]>=1&&y+r1[i]<=n))
		{
			if(a[x+r2[i]][y+r1[i]]!=sly[p].str[j]||b[x+r2[i]][y+r1[i]]==1)
				continue;
			sly[p].ans[j-1]=i;
			x=x+r2[i];
			y=y+r1[i];
			work(x,y,j+1,p);
			b[x][y]=0;
			x=x-r2[i];
		    y=y-r1[i];
			if(sly[p].t)
				break;
		}
	}
}
int main()
{
	freopen("country.in","r",stdin);
	freopen("country.out","w",stdout);
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	cin>>k;
	for(int i=0;i<k;i++)
	{
		cin>>sly[i].str;
	}
	for(int p=0;p<k;p++)
	{
	    for(int i=1;i<=m;i++)
	    {
		    for(int j=1;j<=n;j++)
		    {
				if(a[i][j]==sly[p].str[0])
				{
					sly[p].xans=i;
					sly[p].yans=j;
	                work(i,j,1,p);
					memset(b,0,sizeof(b));
				}
				if(sly[p].t)
					break;
		    }
			if(sly[p].t)
				break;
	    }
		if(!sly[p].t)
			cout<<"No found"<<endl;
		else
		{
			cout<<"("<<sly[p].xans<<","<<sly[p].yans<<")";
			for(int i=0;i<sly[p].str.length()-1;i++)
			{
				cout<<sly[p].ans[i];
			}
			cout<<endl;
		}
	}
	return 0;
}