社区讨论

求大佬帮忙看看逻辑bug,第一个测试点错了

P1789【Mc生存】插火把参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhk77xvg
此快照首次捕获于
2025/11/04 14:39
4 个月前
此快照最后确认于
2025/11/04 14:39
4 个月前
查看原帖
出错测试点在100 1 1 50 50 3 3
CPP
#include<iostream>
using namespace std;
int main()
{
	bool a[110][110];
	int n,i,m,k,x,y,c=0;
	cin >> n >> m >> k;
	for(i=1;i<=m+k;i++)
	{
		cin >> x >> y;
		if(i<=m)
		{
			for(int i=x-1;i<=x+1;i++)
			{
				if(i<0)
				{
					i=0;//如果行超出范围则使行从第一行开始
					continue;
				}
				for(int j=y-1;j<=y+1;j++)
				{
					if(j<0)
					{
						j=0;//如果列超出范围则使列回到第一列
						continue;
					}
					a[i][j]=true;
				}
			}
			//判断火把最外层的光是否超出范围,将未超出的地方标记为光点
			if(x-2>0&&y-2>0)
			{
				a[x-2][y]=true;
				a[x][y-2]=true;
				a[x+2][y]=true;
				a[x][y+2]=true;
			}
			else if(x-2<0&&y-2<0)
			{
				a[x+2][y]=true;
				a[x][y+2]=true;
			}
			else if(x-2<0)
			{
				a[x][y-2]=true;
				a[x+2][y]=true;
				a[x][y+2]=true;
			}
			else
			{
				a[x+2][y]=true;
				a[x][y+2]=true;
				a[x-2][y]=true;
			}
		}
		else//判断萤石
		{
			for(int i=x-2;i<=x+2;i++)
			{
				if(i<=0)
				{
					i=0;//这里跟上面的一样将超出范围的行和列回到第一行第一列
					continue;
				}
				for(int j=y-2;j<=y+2;j++)
				{
					if(j<=0)
					{
						j=0;
						continue;
					}
					a[i][j]=true;
				}
			}
		}
	}
	//计数
	for(i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==false)
			c++;
		}
	}
	cout << c;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...