站外题求助 玄关
  • 板块学术版
  • 楼主ybx2023saier
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/31 13:23
  • 上次更新2024/7/31 14:39:56
查看原帖
站外题求助 玄关
1395022
ybx2023saier楼主2024/7/31 13:23

题目

描述 小林和小华在一个 n×n 的矩形方格里玩游戏,矩形左上角为(0,0),右下角为(n-1,n-1)。 两人同时进入地图的随机位置,并以相同速度进行走位。为了隐蔽性,两人都不会再走自己走过的格子。如果两人向某一方向前进,那么他们会跑到不能跑为止,当不能跑的时候,小林会向右转,小华则会向左转,如果不能跑,则不再动。 现在已知两人进入地图的初始位置和方向,请算出两人遭遇的位置。

输入 第 1 行 1 个正整数 t,表示测试数据组数,1≤t≤10。接下来的 t 组数据,每组数据的第 1 行包含 1 个整数 n,1≤n≤1000。第 2 行包含 3 个整数 x、y 和 d,表示小林的初始位置和一开始跑的方向。其中,d=0 表示东; d=1 表示南;d=2 表示西;d=3 表示北。第 3 行与第 2 行格式相同,但描述的是小华。

输出 输出 t 行,若会遭遇,则包含两个整数,表示他们第一次相遇格子的坐标,否则输出“-1”。

输入样例 1

2 2 0 0 0 0 1 2 4 0 1 0 3 2 0

输出样例 1

-1 1 3

时间限制 1000MS 内存限制 256MB IO 类型 Standard IO 出题人 root 难度 低 分数 100

我的代码:

#include<iostream>
using namespace std;
int dx[]={1,0,-1,0},
	dy[]={0,-1,0,1};
int a[1005][1005];
int n;
int x1,x2,y1,y2,d1,d2;
void dfs(int x1,int y1,int x2,int y2,int d1,int d2)
{
	int bx1=x1+dx[d1],by1=y1+dy[d1];
	if(a[bx1][by1]!=1&&bx1<n&&by1<n&&bx1>=0&&by1>=0)
	{
		a[bx1][by1]=1;
	}
	else
	{
		bx1=x1+dx[0],by1=y1+dy[0];
		if(a[bx1][by1]!=1&&bx1<n&&by1<n&&bx1>=0&&by1>=0)
		{
			a[bx1][by1]=1;
		}
		else 
		{
			cout<<"-1"<<endl;
			return;
		}
	}
	int bx2=x2+dx[d2],by2=y2+dy[d2];
	if(a[bx2][by2]!=2&&bx2<n&&by2<n&&bx2>=0&&by2>=0)
	{
		a[bx2][by2]=2;
	}
	else
	{
		bx2=x2+dx[2],by2=y2+dy[2];
		if(a[bx2][by2]!=2&&bx2<n&&by2<n&&bx2>=0&&by2>=0)
		{
			a[bx2][by2]=2;
		}
		else 
		{
			cout<<"-1"<<endl;
			return;
		}
	}
	if(bx1==bx2&&by1==by2)
	{
		cout<<bx1<<" "<<by1<<endl;
		return;
	}
	else
	{
		dfs(bx1,by1,bx2,by2,d1,d2);
	}
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n;
		cin>>x1>>y1>>d1;
		cin>>x2>>y2>>d2;
		a[x1][y1]=1;a[x2][y2]=2;
		dfs(x1,y2,x2,y2,d1,d2);
	}
	return 0;
}

样例都输出-1,求调,谢谢!

2024/7/31 13:23
加载中...