1 条题解
-
0
自动搬运
来自洛谷,原作者为

未来姚班zyl
欢迎加入粉丝团!https://www.luogu.com.cn/team/72518|AFO搬运于
2025-08-24 21:16:49,当前版本为作者最后更新于2024-11-18 15:21:47,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本题考察内容非常广,涵盖顺序、分支、循环结构,以及字符数组、变量的使用等,考察选手的综合运用能力。
首先是激战环节:
对于每一行,设
A的数量为 ,B的数量为 。- 有城墙
则这一行的前 个字符变为
A,后 个字符变为B,H的位置不变,剩下的变为#。- 没有城墙
则按照题意模拟,如果 ,则这一行全部变为
#,否则,若 ,则右边的 个变为A,剩下的变为#。若 ,则左边的 个变为B,剩下的变为#。然后得到了激战后的局面,接下来是输出阶段。
-
#或者H
则直接输出即可。
-
A或者B
则需判断 和 中是否存在与 相等的,如果存在,则输出
#,否则直接输出 即可。注意每行输出后要换行。
这题码量在入门赛中较大,也有实现细节。代码如下:
#include<bits/stdc++.h> using namespace std; char c[1005][1005]; int n,m; int main(){ cin>>n>>m; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>c[i][j]; for(int i=1;i<=n;i++){ int ca=0,cb=0,ch=0; for(int j=1;j<=m;j++){ if(c[i][j]=='A')ca++; else if(c[i][j]=='B')cb++; else if(c[i][j]=='H')ch++; } if(ch){ for(int j=1;j<=m;j++)if(c[i][j]!='H')c[i][j]='#'; for(int j=1;j<=ca;j++)c[i][j]='A'; for(int j=m-cb+1;j<=m;j++)c[i][j]='B'; }else { if(ca==cb)for(int j=1;j<=m;j++)c[i][j]='#'; else if(ca>cb){ for(int j=1;j<=m;j++)c[i][j]='#'; for(int j=m-ca+1;j<=m;j++)c[i][j]='A'; }else { for(int j=1;j<=m;j++)c[i][j]='#'; for(int j=1;j<=cb;j++)c[i][j]='B'; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(c[i][j]=='#'||c[i][j]=='H')cout<<c[i][j]; else { bool fl=0; if(i>1)fl|=c[i-1][j]==c[i][j]; if(i<n)fl|=c[i+1][j]==c[i][j]; if(fl)cout<<"#"; else cout<<c[i][j]; } } cout <<'\n'; } return 0; }
- 1
信息
- ID
- 10830
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者