2 solutions

  • 3
    @ 2024-5-24 19:14:13
    #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
      @ 2024-7-10 15:34:51
      #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