暴力理所当然的挂掉了 ORz (菜鸡第一次写题解)
思路:
每次加进来一头牛,都看一下4
个相邻的位置,如果有牛,则该相邻的位置和当前位置的值都+1
如果某个相邻位置的值==3
,那么ans++
,如果==4
,那么ans--
看完4
个位置,检查一下当前加入牛位置的值是否等于3
(这里不加也能过)
输出ans
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int g[1010][1010]; // 存储相邻位置牛的个数
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int n, ans;
int main()
{
memset(g, -1, sizeof g); // 初始化g矩阵
scanf("%d", &n);
int a, b;
while (n -- )
{
scanf("%d%d", &a, &b);
g[a][b] = 0; // 0 代表向该位置添加一个牛
for(int i = 0; i < 4; i++) // 遍历相邻的四个位置
{
int x = a + dx[i], y = b + dy[i]; // 拿到坐标
if(x >= 0 && x < 1000 && y >= 0 && y < 1000 && g[x][y] != -1) // 检查相邻的位置是否有牛
{
g[x][y]++, g[a][b]++;
if(g[x][y] == 3) ans++;
if(g[x][y] == 4) ans--; // 相邻位置牛的个数只增不减
}
}
if(g[a][b] == 3) ans ++; // 保一下真, 这个不要也能过
cout << ans << endl;
}
return 0;
}