AcWing 3371. 舒适的奶牛
原题链接
简单
作者:
Ysfsblj
,
2022-05-10 10:20:18
,
所有人可见
,
阅读 165
很清晰的代码
模拟,每添加一个牛判断它周围有没有恰好三头牛,并且把这头牛周围位置的牛的相邻数量加一
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N][N], b[N][N];
// b:位置上有没有
// a:旁边有几个
int main()
{
int n;
cin >> n;
int res = 0;
for(int i = 0; i < n; i++) {
int x, y;
cin >> x >> y;
b[x][y] = 1;
int cnt = 0;
if(x-1 >= 0) {
a[x-1][y]++;
if(a[x-1][y] == 3 && b[x-1][y]) res++;
if(a[x-1][y] == 4 && b[x-1][y]) res--;
}
if(x+1 <= 1000) {
a[x+1][y]++;
if(a[x+1][y] == 3 && b[x+1][y]) res++;
if(a[x+1][y] == 4 && b[x+1][y]) res--;
}
if(y-1 >= 0) {
a[x][y-1]++;
if(a[x][y-1] == 3 && b[x][y-1]) res++;
if(a[x][y-1] == 4 && b[x][y-1]) res--;
}
if(y+1 <= 1000) {
a[x][y+1]++;
if(a[x][y+1] == 3 && b[x][y+1]) res++;
if(a[x][y+1] == 4 && b[x][y+1]) res--;
}
if(x-1 >= 0 && b[x-1][y]) cnt++;
if(x+1 <= 1000 && b[x+1][y]) cnt++;
if(y-1 >= 0 && b[x][y-1]) cnt++;
if(y+1 <= 1000 && b[x][y+1]) cnt++;
if(cnt == 3) res++;
cout << res << "\n";
}
return 0;
}