lanqiaoOJ 551 灌溉
//用两个二维数组分别记录当前和后一分钟灌溉情况,持续按照题意更新数组
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N][N],b[N][N];
int n,m;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
int t;cin>>t;
int r,c;
for(int g=1;g<=t;g++){
cin>>r>>c;
a[r][c]++;
}
int k;cin>>k;
while(k--){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]){
//b[i][j]也要设置为1,否则马上更新了之后a[i][j]就变成了0,即a[i][j]周围都被灌溉,就自己还没有灌溉,导致
b[i][j]=b[i-1][j]=b[i+1][j]=b[i][j-1]=b[i][j+1]=1;
}
}
}
//在某一分钟内,所以的水管都发挥浇灌作用后,在进行整体的更新
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i][j]=b[i][j];
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]){
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}