题目:
###本题主要考察枚举、模拟
#include<bits/stdc++.h>
using namespace std;
const int N=105;
bool a[N][N],b[N][N];
int main(){
int n,m;
cin>>n>>m;
int t;
cin>>t;
while(t--){
int c,r;
cin>>c>>r;
a[c][r]=1;
}
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]=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<<'\n';
return 0;
}
整体思路:
- 首先根据题目一个可能操作起来比较麻烦,所以我们设立两个二维数组,按照题目输入数据组数,用while循环将a数组初始化
- 最后输入时间,还是用while循环用时间k作为判断条件,循环中总结起来就两步(第一步 将a对应位置的b及其上下左右都标记为1,第二步 下一次还要对a进行遍历,那么将该单位时间内的a与b同步)
- 两重循环将a数组遍历用ans计数,输出
###也是注意括号对应的循环,不要看串了,第二个while循环中是主体部分,找到while循环中的两部分内容自然而然就会写了