链接
传送门http://www.jzoj.cn/problem.php?id=2793
代码
#include <bits/stdc++.h>
using namespace std;
int n,i,j,k,m,ans=0;
char a[101][101],b[101][101];
int main()
{
freopen("flu.in","r",stdin);
freopen("flu.out","w",stdout);
cin >> n;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
cin >> a[i][j];
cin >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
b[i][j] = a[i][j];
for (k = 1; k < m; k++){
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++){
if (a[i][j] == '@'){
if (a[i+1][j] == '.'){
b[i+1][j] = '@';
}
if (a[i-1][j] == '.'){
b[i-1][j] = '@';
}
if (a[i][j+1] == '.'){
b[i][j+1] = '@';
}
if (a[i][j-1] == '.'){
b[i][j-1] = '@';
}
}
}
}
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
a[i][j] = b[i][j];
}
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (a[i][j] == '@') ans++;
cout << ans << endl;
return 0;
}
这道题没什么特别大的难点 就是费时间
思路:写多重循环定义二维数组b作为下一天的状态,防止只用a数组导致下一天状态和今天混淆了,然后挨个判断感染者上下左右有没有其他健康人并赋给下一天状态。还要记得将下一天状态变为今天状态,最后遍历感染者数量,输出