2 solutions
-
3
#include<bits/stdc++.h> using namespace std; const int N=110; char g[N][N],bg[N][N]; int dx[]={-1,1,0,0},dy[]={0,0,-1,1}; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>g[i]; int m; cin>>m; m--; while(m--) { memcpy(bg,g,sizeof g); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(g[i][j]!='@') continue; //没有感染 for(int k=0;k<4;k++) //枚举周围4个点 { int a=i+dx[k],b=j+dy[k]; if(a<0||a>=n||b<0||b>=n) //越界 continue; if(bg[a][b]=='#') //空白 continue; bg[a][b]='@'; //感染 } } } memcpy(g,bg,sizeof bg); //将第i天当成第i+1天的前一天 } int cnt=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(g[i][j]=='@') cnt++; } cout<<cnt; return 0; }
-
-3
#include <bits/stdc++.h> using namespace std; const int N=105; char a[N][N]; int dx[]={0,0,-1,1}; int dy[]={1,-1,0,0} ; int main() { int n,m,d=0,z=0; cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } cin>>m; for(int i=1;i<m;i++) { for(int j=1;j<=n;j++) { for(int l=1;l<=n;l++) { if(a[j][l]=='@') { for(int b=1;b<=4;b++) { if(a[j+dy[d]][l+dx[d]]=='.') { a[j+dy[d]][l+dx[d]]=','; d++; } else { d++; } } d=0; } } } for(int c=1;c<=n;c++) { for(int v=1;v<=n;v++) { if(a[c][v]==',')a[c][v]='@'; } } } for(int c=1;c<=n;c++) { for(int v=1;v<=n;v++) { if(a[c][v]=='@')z++; } } cout<<z; return 0; }
- 1
Information
- ID
- 929
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 65
- Accepted
- 17
- Uploaded By