4 条题解

  • 2
    @ 2023-12-6 18:30:12
    #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); //等价于bg=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;
    }
    
    • 1
      @ 2024-1-6 15:20:22

      这段代码的主要目的是模拟一个网格状的宿舍区,其中每个房间可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感。最后输出第m天得流感的人数。

      代码解释:

      1. 首先定义了一个二维字符数组g[N][N]来存储宿舍区的初始状态,其中'.'表示健康的人,'#'表示空着的房间,'@'表示第一天该房间住着得流感的人。
      2. 然后定义了一个二维字符数组bg[N][N]来存储每一天宿舍区的状态,用于计算下一天的状态。
      3. 定义了两个一维数组dx[]和dy[],分别表示上下左右四个方向的偏移量。
      4. 在main函数中,首先读取宿舍区的行数n,然后读取n行输入,将输入存储到数组g中。
      5. 接着读取天数a,然后将a减1,因为题目中的天数是从0开始计数的。
      6. 使用while循环,每次循环代表一天。在循环中,首先将当前状态复制到bg中,然后遍历每一个房间,如果房间中有得流感的人,就将其邻居的房间标记为得流感的人。
      7. 最后,将bg中的状态复制回g中,进行下一天的计算。
      8. 当所有的天数都计算完毕后,再次遍历g,统计得流感的人数,并输出结果。

      代码:

      #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 a;
      	cin>>a;
      	a--;
      	while(a--){
      		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++){
      					int m=dx[k]+i,b=dy[k]+j;
      					if(m<0||m>=n||b<0||b>=n){
      						continue;
      					}
      					if(bg[m][b]=='#'){
      						continue;
      					}
      					bg[m][b]='@';
      				}
      			}
      		}
      		memcpy(g,bg,sizeof bg);
      	}
      	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;
      }
      
      • -1
        @ 2023-12-24 9:19:57
        #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++)
        				{
        					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);
        	}
        	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
          @ 2023-12-6 18:36:13

          fiidsfnlkfnsdfkdaskjfnsdfn

          • 1

          信息

          ID
          1429
          时间
          1000ms
          内存
          128MiB
          难度
          8
          标签
          (无)
          递交数
          36
          已通过
          7
          上传者