8 solutions

  • 6
    @ 2024-7-8 16:24:35
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    char g[N][N];
    int dx[]={-1,-1,-1,0,0,1,1,1};
    int dy[]={-1,0,1,-1,1,-1,0,1};
    bool st[N][N];
    int n,m;
    struct Node{
       int x,y;
    };
    void bfs(int x,int y)
    {
       queue<Node> q;
       q.push({x,y});
       st[x][y]=1;
       while(q.size())
       {
          Node t=q.front();
          q.pop();
          int x=t.x,y=t.y;
          for(int i=0;i<8;i++)
          {
             int a=x+dx[i],b=y+dy[i];
             if(a<0||a>=n||b<0||b>=m)
             {
                continue;
             }
             if(g[a][b]=='.')
             {
                continue;
             }
             if(st[a][b]) 
    			{
    				continue;
    			}
             st[a][b]=1;
             q.push({a,b});
          }
       }
    }
    int main()
    {
       cin>>n>>m;
       for(int i=0;i<n;i++)
       {
          cin>>g[i];
       }
       int res=0;
       for(int i=0;i<n;i++)
       {
          for(int j=0;j<m;j++)
          {
             if(g[i][j]=='W'&&!st[i][j])
             {
                bfs(i,j);
                res++;
             }
          }
       }
       cout<<res;
       return 0;
    }
    
  • 4
    @ 2024-7-8 16:03:34
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    char g[N][N];
    int dx[]={-1,-1,-1,0,0,1,1,1};
    int dy[]={-1,0,1,-1,1,-1,0,1};
    bool st[N][N];
    int n,m;
    struct Node
    {
    	int x,y;
    };
    void bfs(int x,int y)
    {
    	queue<Node> q;
    	q.push({x,y});
    	st[x][y]=1;
    	while(q.size())
    	{
    		Node t=q.front();
    		q.pop();
    		int x=t.x,y=t.y;
    		for(int i=0;i<8;i++)
    		{
    			int a=x+dx[i],b=y+dy[i];
    			if(a<0 || a>=n || b<0 || b>=m)
    			{
    				continue;
    			}
    			if(g[a][b]=='.')
    			{
    				continue;
    			}
    			if(st[a][b]) 
    			{
    				continue;
    			}
    			st[a][b]=1;
    			q.push({a,b});
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		cin>>g[i];
    	} 
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			if(g[i][j]=='W' && !st[i][j]) 
    			{
    				bfs(i,j);
    				res++;
    			}
    		}
    	}
    	cout<<res;
    	return 0;
    }
    
    • 0
      @ 2026-3-22 13:34:46

      首页 题库 训练 比赛 作业 讨论 评测记录 排名 主题库 许皓辰 A. [ABC240D] 奇怪的球(Strange Balls) A B C D E F G H 传统题 1000ms 256MiB 题目描述 小高有 N N 个球。每个球上都写有一个不小于 2 2 的整数。他将把它们一个接一个地放入一个圆柱体中。

      第 i i个球上写的整数是 a i a i ​ 。这些球是由特殊材料制成的。当 k k 个写有 k ( k ≥ 2 ) k(k≥2)的球连续排列时,这 k k 个球就会消失。

      对于每个 i

      ( 1

      i

      N ) i (1 ≤ i ≤ N),请找出插入第 i i 个球后圆柱体中剩余的球的数量。

      输入格式 输入从标准输入中以下列格式给出:

      N N

      a 1 a 1 ​

      … … a N a N ​

      输出格式 输出 N N行。

      第 i i行 ( 1 ≤ i ≤ N ) (1≤i≤N)应包含插入第 i i 个球后圆柱体中剩余的球的数量。

      输入输出样例 #1 输入 #1 5 3 2 3 2 2 输出 #1 1 2 3 4 3 输入输出样例 #2 输入 #2 10 2 3 2 3 3 3 2 3 3 2 输出 #2 1 2 3 4 5 3 2 3 1 0 说明/提示 样例 1 解释 圆柱体的内容变化如下。

      插入第1个球后,圆柱体包含写有3的球。 插入第2个球后,圆柱体从底部到顶部包含3, 2。 插入第3个球后,圆柱体从底部到顶部包含3, 2, 3。 插入第4个球后,圆柱体从底部到顶部包含3, 2, 3, 2。 插入第5个球后,圆柱体瞬间从底部到顶部包含3, 2, 3, 2, 2。两个连续的写有2的球消失,圆柱体最终从底部到顶部包含3, 2, 3。

      数据范围 1

      N

      2

      ×

      10 5 1 ≤ N ≤ 2 × 10 5

      2

      a i

      2

      ×

      10 5

      ( 1

      i

      N ) 2 ≤ a i ​ ≤ 2 × 10 5 (1 ≤ i ≤ N) 所有输入值都是整数。 进入在线编程模式 (Alt+E) 递交 季科_周天下午 已认领 查看作业 成绩表 导出所有代码 所有递交 帮助 状态正在进行…题目8开始时间2025-3-23 0:00截止时间2026-11-26 23:59可延期24 小时 状态 评测队列 服务状态 开发 开源 支持 帮助 联系我们 关于 关于 隐私 服务条款 版权申诉 Language 兼容模式 主题 蜀ICP备2025166542号-1Worker 0, 37msPowered by Hydro v5.0.0-beta.18 Community

      • 0
        @ 2026-3-15 11:28:13
        #include<bits/stdc++.h>
        using namespace std;
        const int N=110;
        char g[N][N];
        bool st[N][N];
        int dx[]={-1,-1,-1,0,0,1,1,1};
        int dy[]={-1,0,1,-1,1,-1,0,1}; 
        typedef pair<int,int> PII;
        int n,m;
        void bfs(int x,int y)
        {
        	queue<PII> q;
        	q.push({x,y});
        	st[x][y]=1;
        	while(q.size())
        	{
        		PII t=q.front();
        		q.pop();
        		for(int i=0;i<8;i++)
        		{
        			int a=t.first+dx[i],b=t.second+dy[i];
        			if(a<0||a>=n||b<0||b>=m) continue;
        			if(st[a][b]==1) continue;
        			if(g[a][b]=='.') continue;
        			q.push({a,b});
        			st[a][b]=1;
        		}
        	}
        }
        int main()
        {
        	cin>>n>>m;
        	for(int i=0;i<n;i++)
        	{
        		cin>>g[i];
        	}
        	int cnt=0;
        	for(int i=0;i<n;i++)
        	{
        		for(int j=0;j<m;j++)
        		{
        			if(st[i][j]==0&&g[i][j]=='W')
        			{
        			//	cout<<i<<" "<<j<<endl; 
        				cnt++;
        				bfs(i,j);
        			}
        		}
        	}
        	cout<<cnt;
        	return 0;
        }
        
        
        
        • -1
          @ 2025-12-22 17:45:14
          #include<bits/stdc++.h>
          using namespace std;
          const int N=120;
          char g[N][N];
          int n,m;
          int dx[]={-1,-1,-1,0,0,1,1,1};
          int dy[]={-1,0,1,-1,1,-1,0,1};
          bool st[N][N];
          typedef pair<int,int> PII;
          #define x first
          #define y second
          void bfs(int x,int y)
          {
          	st[x][y]=1;
          	queue<PII> q;
          	q.push({x,y});
          	while(q.size())
          	{
          		PII t=q.front();
          		q.pop();
          		for(int i=0;i<8;i++)
          		{
          			int a=t.x+dx[i],b=t.y+dy[i];
          			if(st[a][b]) continue;
          			if(g[a][b]=='.') continue;
          			if(a<1||a>n||b<1||b>m) continue;
          			q.push({a,b});
          			st[a][b]=1;
          		}
          	}
          }
          int main()
          {
          	cin>>n>>m;
          	for(int i=1;i<=n;i++)
          	{
          		for(int j=1;j<=m;j++)
          		{
          			cin>>g[i][j];
          		}
          	}
          	int cnt=0;
          	for(int i=1;i<=n;i++)
          	{
          		for(int j=1;j<=m;j++)
          		{
          			if(g[i][j]=='W'&&st[i][j]==0)
          			{
          				bfs(i,j); //使用函数进行遍历
          				cnt++;
          			}
          		}
          	}
          	cout<<cnt;
          	return 0;
          }
          
          
          • -1
            @ 2025-3-29 19:18:13
            #include<bits/stdc++.h>
            using namespace std;
            const int N=120;
            int dx[]={-1,0,1,-1,1,-1,0,1};
            int dy[]={-1,-1,-1,0,0,1,1,1};
            char g[N][N];
            int n,m;
            bool cnt[N][N];
            struct node{int x,y;};
            void bfs(int x,int y)
            {
            	cnt[x][y]=1;
            	queue<node>q;
            	q.push({x,y});
            	while(q.size())
            	{
            		node t=q.front();
            		q.pop();
            		for(int i=0;i<8;i++)
            		{
            			int a=t.x+dx[i],b=t.y+dy[i];
            			if(g[a][b]=='.')
            			{
            				continue;
            			}
            			if(a<1||a>n||b<1||b>m)
            			{
            				continue;
            			}
            			if(cnt[a][b])
            			{
            				continue;
            			}
            			q.push({a,b});
            			cnt[a][b]=1;
            		}
            	}
            }
            int main(){
            	cin>>n>>m;
            	for(int i=1;i<=n;i++)
            	{
            		for(int j=1;j<=m;j++)
            		{
            			cin>>g[i][j];
            		}
            	}
            	int res=0;
            	for(int i=1;i<=n;i++)
            	{
            		for(int j=1;j<=m;j++)
            		{
            			if(g[i][j]=='W'&&!cnt[i][j])
            			{
            				bfs(i,j);
            				res++;
            			}
            		}
            	}
            	cout<<res;
            	return 0;
            }
            
            
            • -5
              @ 2024-11-30 10:11:09

              我讨厌吃糖技术!!

              • -7
                @ 2024-7-8 15:48:47
                #include<bits/stdc++.h>
                using namespace std;
                const int N=1010;
                char g[N][N];
                vector<int> dx[N]={0,-1,1,0,1,0,-1,1};
                vector<int> dy[N]={0,-1,1,-1,-1,0,0,1};
                int n,m,st[N][N];
                struct Node{
                	int x,y;
                };
                bool bfs(int x,int y,int q[N])
                {
                	q.push({x,-1});
                	q.push({y,-1});
                	st[0][0]=0;
                	while(--q.size())
                	{
                		Node t=q.size();
                		int f=q.top();
                		int x=f.x,y=f.y;
                		for(int i=1;i<=q.x;i++)
                		{
                			int a=x+q[i],b=y+q[i];
                			if(x<0||a>=n||b<0||b>=m) break;
                			if(st[a][b]=='M') break;
                			if(q[a][b]) break;
                			q[0][1]=1;
                			q.push({-1,x});
                			q.push({-1,y});
                		}
                	}
                }
                int main()
                {
                	cin>>n>>m;
                	for(int i=1;i<=n;i++) cin>>g[i];
                	int res;
                	for(int i=0;i<n>>1;i++)
                	{
                		for(int j=i;j<m/i;j++)
                		{
                			if(st[i][j]=='W'&&q[i][j])
                			{
                				bfs(q,res);
                				res--;
                			}
                		}
                		res++;
                	}
                	cout<<res;
                	return 0;
                }
                
                
                • 1

                Information

                ID
                207
                Time
                1000ms
                Memory
                256MiB
                Difficulty
                3
                Tags
                # Submissions
                115
                Accepted
                26
                Uploaded By