过啦!!!嗨嗨嗨!!!
2023-07-16 14:44:34
发布于:广东
13阅读
0回复
0点赞
以下是AC题解
#include <iostream>
#include <cstdio>
using namespace std;
bool map[1005][1005];
int dxy[4][2] = {{0,1},{1,0},{-1,0},{0,-1}};
//检查x,y周围四个方向上是否恰好有3个点
bool check(int x, int y){
if (map[x][y] == 0)return 0;
int point = 0;
for (int i = 0; i < 4; i++){
//注意判断越界
if (map[x + dxy[i][0]][y + dxy[i][1]] && x + dxy[i][0] >= 0 && x + dxy[i][0] <= 1000 && y + dxy[i][1] >= 0 && y + dxy[i][1] <= 1000){
point++;
}
}
return point == 3;
}
int main(){
int n;
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++){
int x, y;
cin >> x >> y;
//新点加入之前,check该点周围四个点是否有舒适点
for(int j = 0; j < 4; j++) {
//原来就是舒适点
if (check(x + dxy[j][0], y + dxy[j][1])){
//看新加入xy点后是否仍为舒适点
map[x][y] = 1;
//如果是,则不需要为总和新增,更新xy点为0看下一个点
if(check(x + dxy[j][0], y + dxy[j][1])) {
map[x][y] = 0;
}else {//如果不是了,就在总和更新减少,同时更新xy点
ans--;
map[x][y] = 0;
}
}else {//原来不是舒适点
//看新加入xy点后是否变为舒适点
map[x][y] = 1;
//如果是,则总和新增1,更新xy点为0看下一个点
if(check(x + dxy[j][0], y + dxy[j][1])) {
ans++;
map[x][y] = 0;
}else {//如果仍然不是,则无需变化,同时更新xy点
map[x][y] = 0;
}
}
}
//加入该点
map[x][y] = 1;
if (check(x, y))ans++;
cout << ans << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个