8 solutions
-
6
#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
#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
首页 题库 训练 比赛 作业 讨论 评测记录 排名 主题库 许皓辰 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
#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
#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
#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; } -
-7
#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