求助,调了很久细节,实在不知道错哪了
查看原帖
求助,调了很久细节,实在不知道错哪了
482856
TigerNick楼主2023/8/8 00:16
#include <bits/stdc++.h>
#define MAXN 20
#define int long long
using namespace std;
const int dx[8]={-2,-2,-1,1,2,2,1,-1};
const int dy[8]={-1,1,2,2,1,-1,-2,-2};
const int dx2[8]={-1,-1,0,0,1,1,0,0};
const int dy2[8]={0,0,1,1,0,0,-1,-1};
int n,x,y;
struct node
{
	char opt;
	int x,y;
}a[MAXN];
int f[MAXN][MAXN],vis[MAXN][MAXN];
void solve()
{
	memset(f,0,sizeof(f));
	memset(vis,0,sizeof(vis));
	f[1][3]=f[2][3]=f[3][3]=f[4][4]=f[4][5]=f[4][6]=f[3][7]=f[2][7]=f[1][7]=1;
	f[0][5]=f[0][4]=f[0][6]=1;
	for(int i=1;i<=n;i++) cin>>a[i].opt>>a[i].x>>a[i].y,vis[a[i].x][a[i].y]=1;
	bool flag=0;
	for(int i=1;i<=n&&!flag;i++)
	{
		int opt=a[i].opt;
		if(opt=='R')
		{
			for(int j=a[i].y+1;j<=9;j++)
			{
				f[a[i].x][j]=1;
				if(vis[a[i].x][j]&&(x!=a[i].x||y!=j))
					break;
			}
			for(int j=a[i].y-1;j>=1;j--)
			{
				f[a[i].x][j]=1;
				if(vis[a[i].x][j]&&(x!=a[i].x||y!=j))
					break;
			}
			for(int k=a[i].x-1;k>=1;k--)
			{
				f[k][a[i].y]=1;
				if(vis[k][a[i].y]&&(x!=k||y!=a[i].y)) break;
			}
			for(int k=a[i].x+1;k<=10;k++)
			{
				f[k][a[i].y]=1;
				if(vis[k][a[i].y]&&(x!=k&&y!=a[i].y)) break;
			}
		}
		else if(opt=='H')//check
		{
			for(int j=0;j<8;j++)
				if(!vis[a[i].x+dx2[j]][a[i].y+dy2[j]]&&a[i].x+dx[j]>=1&&a[i].x+dx[j]<=10&&a[i].y+dy[j]>=1&&a[i].y+dy[j]<=9)
					f[a[i].x+dx[j]][a[i].y+dy[j]]=1;
		}
		else if(opt=='C')
		{
			for(int j=a[i].y+1;j<=9;j++)
			{
				if(vis[a[i].x][j]&&(a[i].x!=x||j!=y)) 
				{
					for(int k=j+1;k<=9;k++)
					{
						f[a[i].x][k]=1;
						if(vis[a[i].x][k]&&(x!=a[i].x||y!=k))
							break;
					}
					break;
				}
			}
			for(int j=a[i].y-1;j>=1;j--)
			{
				if(vis[a[i].x][j]&&(a[i].x!=x||j!=y))
				{
					for(int k=j-1;k>=1;k--)
					{
						f[a[i].x][k]=1;
						if(vis[a[i].x][k]&&(x!=a[i].x||y!=k))
							break;
					}
					break;
				}
			}
			for(int k=a[i].x-1;k>=1;k--)
			{
				if(vis[k][a[i].y]&&(k!=x||a[i].y!=y))
				{
					for(int j=k-1;j>=1;j--)
					{
						f[j][a[i].y]=1;
						if(vis[j][a[i].y]&&(x!=j||y!=a[i].y)) break;
					}
					break;
				}
			}
			for(int k=a[i].x+1;k<=10;k++)
			{
				if(vis[k][a[i].y]&&(k!=x||a[i].y!=y))
				{
					for(int j=k+1;j<=9;j++)
					{
						f[j][a[i].y]=1;
						if(vis[j][a[i].y]&&(x!=j||y!=a[i].y)) break;
					}
					break;
				}
			}
		}
		else
		{
			for(int j=a[i].x-1;j>=1;j--)
			{
				f[j][a[i].y]=1;
				if(vis[j][a[i].y]&&(x!=j||y!=a[i].y))
					break;
				if(x==j&&y==a[i].y)
				{
					cout<<"NO"<<'\n';
					flag=1;
					break;
				}
			}
		}
		//for(int i=1;i<=10;i++,cout<<endl)
		//for(int j=1;j<=9;j++)
		//	cout<<f[i][j]<<" ";cout<<endl;cout<<endl;
	}
	for(int i=1;i<=10;i++,cout<<endl)
		for(int j=1;j<=9;j++)
			cout<<f[i][j]<<" ";cout<<endl;cout<<endl;
	if(!flag&&f[x+1][y]&&f[x-1][y]&&f[x][y-1]&&f[x][y+1]) cout<<"YES"<<'\n';
	else if(!flag) cout<<"NO"<<'\n';
}
signed main()
{
	ios::sync_with_stdio(0);
	while(cin>>n>>x>>y)
	{
		if(!n&&!x&&!y) break;
		solve();
	}
	return 0;
}
/*
4 1 4
H 3 2
C 2 4
R 1 5
G 10 5


1 5 5
G 9 5

2 3 5
H 5 5
C 9 5

1 1 4
R 2 5

2 3 5
C 1 5
C 7 5


0 0 0
*/
//R H C G
2023/8/8 00:16
加载中...