hdu 4740 The Donkey of Gui Zhou

让这个题坑坏了,不过没报这个赛区。不过貌似比成都的题目出的简单。成都竟然还有签到题。这个题目就是说现在有个人将一只驴和一只老虎放入了一个矩阵中,然后老虎和驴都是直线跑但是他们不走自己走过的路,并且当无路可走的时候就要转弯,驴每次转弯都是朝右转,老虎正好朝左转。问这两个动物能不能相遇,如果能输出第一次坐标,不能输出-1。首先声明这个题目中的两个cheat,第一个转向的时候要忽略时间,第二个可能数据中有刚开始两个动物就在一块。模拟题。

#include<iostream>
#include<cstring>
using namespace std;
bool map1[1005][1005];
bool map2[1005][1005];
int zong[4]={1,0,-1,0};
int heng[4]={0,1,0,-1};
int main()
{
	int N,i,j,x1,x2,y1,y2,dt,dd,x,y,ans1,ans2,ok;
	while(cin>>N)
	{
		if(N==0)
			break;
		ok=0;
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{
				map1[i][j]=false;
				map2[i][j]=false;
			}
		cin>>x1>>y1>>dd;
		cin>>x2>>y2>>dt;
		if(x1==x2&&y1==y2)
		{
			cout<<x1<<" "<<y1<<endl;
			continue;
		}
		bool flag1=true,flag2=true;
		map1[x1][y1]=true;
		map2[x2][y2]=true;
		while(flag1==true||flag2==true)
		{
			if(flag1==true)
			{
				x=x1+heng[dd];
				y=y1+zong[dd];
				if(x>=0&&x<N&&y>=0&&y<N&&map1[x][y]==false)
				{
					x1=x;
					y1=y;
					map1[x1][y1]=true;
				}
				else {
					dd=(dd+1)%4;
					x=x1+heng[dd];
					y=y1+zong[dd];
					if(x>=0&&x<N&&y>=0&&y<N&&map1[x][y]==false)
					{
						x1=x;
						y1=y;
						map1[x][y]=true;
					}
					else flag1=false;
				}
			}
			if(flag2==true)
			{
				x=x2+heng[dt];
				y=y2+zong[dt];
				if(x>=0&&x<N&&y>=0&&y<N&&map2[x][y]==false)
				{
					x2=x;
					y2=y;
					map2[x2][y2]=true;
				}
				else {
					dt=(dt+3)%4;
					x=x2+heng[dt];
					y=y2+zong[dt];
					if(x>=0&&x<N&&y>=0&&y<N&&map2[x][y]==false)
					{
						x2=x;
						y2=y;
						map2[x2][y2]=true;
					}
					else flag2=false;
				}
			}
			if(x1==x2&&y1==y2)
			{
				ok=1;
				ans1=x1;
				ans2=y1;
				break;
			}
		}
		if(ok==1)
			cout<<ans1<<" "<<ans2<<endl;
		else cout<<"-1"<<endl;
	}
	return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值