记录编号 116782 评测结果 AAAAAAAAAA
题目名称 [USACO Jan09] 激光电话 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2014-08-27 08:33:58 内存使用 0.27 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
ifstream in("lphone.in");
ofstream out("lphone.out");
struct sss{
	int s;
	queue<int> h,z;
};
sss a[2];
bool pd1[101][101]={0},pd2[101][101]={0},qwq=false;
int zj1,zj2,zj3,zj4,m,n,i,l,k,p,y,qdh,qdz,zdh,zdz,zh1=1,zh0=0,zh,zui=0;
char aiky;
void init();
void vocaloid1();
void vocaloid2();
int main()
{
	init();
	vocaloid1();
	vocaloid2();
	out<<zui<<endl;
	in.close();
	out.close();
	return 0;
}
void init()
{
	in>>m>>n;
	for(i=1;i<=n;i++)
	for(y=1;y<=m;y++)
	{
		in>>aiky;
		if(aiky!='.')
		{
			if(aiky=='*')
			{
				pd1[i][y]=true;
				pd2[i][y]=true;
			}
			else
			{
				if(qwq==false){qdh=i;qdz=y;qwq=true;}
				else{zdh=i;zdz=y;qwq=false;}
			}
		}
	}
}
void vocaloid1()
{
	a[0].s=0;
	a[1].s=0;
	i=qdh+1;
	while(i<=n&&pd1[i][qdz]!=true)
	{
		a[0].h.push(i);
		a[0].z.push(qdz);
		pd2[i][qdz]=true;
		a[0].s++;
		i++;
	}
	i=qdh-1;
	while(i>=1&&pd1[i][qdz]!=true)
	{
		a[0].h.push(i);
		a[0].z.push(qdz);
		pd2[i][qdz]=true;
		a[0].s++;
		i--;
	}
	i=qdz+1;
	while(i<=m&&pd1[qdh][i]!=true)
	{
		a[0].h.push(qdh);
		a[0].z.push(i);
		pd2[qdh][i]=true;
		a[0].s++;
		i++;
	}
	i=qdz-1;
	while(i>=1&&pd1[qdh][i]!=true)
	{
		a[0].h.push(qdh);
		a[0].z.push(i);
		pd2[qdh][i]=true;
		a[0].s++;
		i--;
	}
}
void vocaloid2()
{
	while(1)
	{
		while(a[zh0].s!=0)
		{
			zj1=a[zh0].h.front();a[zh0].h.pop();
			zj2=a[zh0].z.front();a[zh0].z.pop();
			a[zh0].s--;
			if(zj1==zdh&&zj2==zdz)
			{
				qwq=true;
				break;
			}
			zj3=zj1+1;
			while(zj3<=n&&pd1[zj3][zj2]!=true)
			{
				if(pd2[zj3][zj2]==false)
				{
					a[zh1].h.push(zj3);
					a[zh1].z.push(zj2);
					pd2[zj3][zj2]=true;
					a[zh1].s++;
				}
				zj3++;
			}
			zj3=zj1-1;
			while(zj3>=1&&pd1[zj3][zj2]!=true)
			{
				if(pd2[zj3][zj2]==false)
				{
					a[zh1].h.push(zj3);
					a[zh1].z.push(zj2);
					pd2[zj3][zj2]=true;
					a[zh1].s++;
				}
				zj3--;
			}
			zj3=zj2+1;
			while(zj3<=m&&pd1[zj1][zj3]!=true)
			{
				if(pd2[zj1][zj3]==false)
				{
					a[zh1].h.push(zj1);
					a[zh1].z.push(zj3);
					pd2[zj1][zj3]=true;
					a[zh1].s++;
				}
				zj3++;
			}
			zj3=zj2-1;
			while(zj3>=1&&pd1[zj1][zj3]!=true)
			{
				if(pd2[zj1][zj3]==false)
				{
					a[zh1].h.push(zj1);
					a[zh1].z.push(zj3);
					pd2[zj1][zj3]=true;
					a[zh1].s++;
				}
				zj3--;
			}
		}
		if(qwq==true) break;
		zh=zh0;
		zh0=zh1;
		zh1=zh;
		zui++;
	}
}