P9944

· · 题解

题目

思路

这题有一种比较简单的做法,设变量 ans 表示舒适的奶牛的数量,a 数组表示奶牛四周其他奶牛的数量,如果发现有 3 只就 ans 加 1,如果有 4 只就将 ans 减 1,还有不要忘记本来奶牛四周是否有 3 只奶牛。

Std:

#include<bits/stdc++.h>
#define N 1010
using namespace std;
int n,ans,a[N][N],sx,sy,x,y;
bool vis[N][N];
int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){//从1开始防止越界
        cin>>x>>y;
        for(int j=0;j<4;j++){
            sx=x+d[j][0],sy=y+d[j][1];
            a[sx][sy]++;
            if(a[sx][sy]==3&&vis[sx][sy])ans++;
            if(a[sx][sy]==4&&vis[sx][sy])ans--;
        }
        vis[x][y]=1;
        if(a[x][y]==3)ans++;
        cout<<ans<<endl;
    }
    return 0;
}