P7411 [USACO21FEB] Comfortable Cows S 题解

HJZhao Lv2

GMOJ
洛谷

大意

有一个矩阵 TT, Farmer John 每轮会往 TT 矩阵中放一个牛,如果这牛旁边恰好有3头牛,则称这个牛是「舒适的」,求每轮 TT 矩阵中有多少个牛是「舒适的」。

解法

用一个二维数组 BB 记录这个位置旁有多少头牛,每次添加牛时把四周的位置的 BB 值加一,然后判断这个位置是否是「舒适的」,如果是,则 ansans 加一;如果是4,ansans 就减一,如果自己是舒适的,则 ansans 加一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <bits/stdc++.h>
#define qint int
using namespace std;
int a[1005][1005],b[1005][1005],fx[5]={0,0,0,1,-1},fy[5]={0,1,-1,0,0};
void read(int& x)
{
x=0;
char c=getchar();
while (c<'0'||c>'9') c=getchar();
while (c>='0'&&c<='9')
{
x=(x*10)+(c-'0');
c=getchar();
}
}
int main()
{
qint n;
read(n);
for (int i = 1,x,y,ans=0 ; i <= n ; ++i)
{
read(x);
read(y);
x++;
y++;
b[x][y]=1;
if (a[x][y]==3)ans++;
for (int j = 1 ; j <= 4 ; ++j)
{
a[x+fx[j]][y+fy[j]]++;
if (b[x+fx[j]][y+fy[j]]==0) continue;
if (a[x+fx[j]][y+fy[j]]==3) ans++;
if (a[x+fx[j]][y+fy[j]]==4) ans--;
}
printf("%d\n",ans);
}
return 0;
}

赛时居然还想循环展开卡常,幸好没写^{赛时居然还想循环展开卡常,幸好没写}

  • 标题: P7411 [USACO21FEB] Comfortable Cows S 题解
  • 作者: HJZhao
  • 创建于 : 2025-01-04 14:36:00
  • 更新于 : 2025-01-04 14:39:47
  • 链接: https://china-hjz.github.io/posts/24646.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
P7411 [USACO21FEB] Comfortable Cows S 题解