3 solutions

  • 4
    @ 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;
    }
    
    • 0
      @ 2026-7-31 22:08:49
      #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;
      }
      • -2
        @ 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
        76
        Accepted
        23
        Uploaded By