社区讨论
求大佬帮忙看看逻辑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 条回复,欢迎继续交流。
正在加载回复...