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

Aiopr_2378
沿湍流兮望归舟搬运于
2025-08-24 22:30:55,当前版本为作者最后更新于2021-05-01 20:37:53,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Solution P7550 [COCI2020-2021#6] Bold
一、思路:
这道题还是很简单的······读题可得:如果点为"#",那么点,点,点都将变为"#"。
输入自然很简单,普通用、就可以读入/输出。
cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } }要注意的是:
每个点更新的时候我们不能从方向更新,这样更新的点会被扫到错误答案,例如:
.... .#.. .... ....当我们更新时,、、都会被更新。(如下图)
.... .##. .##. ....但是我们在更新时就会发现这个点已经被更新,所以、、也会被更新,以此类推。(如下图)
.... .### .### .###但是我们是不能更新这几个点的,因为题目中的不是"#"。会导致程序错误。
那我们怎样更新呢?我们可以从的方向更新,这样是不会出问题的。
for(int i=n;i>0;i--){ for(int j=m;j>0;j--){ if(a[i][j]=='#'){ a[i][j+1]='#'; a[i+1][j]='#'; a[i+1][j+1]='#'; } } }然后再输出就行了。
二、参考代码:
#include<bits/stdc++.h> using namespace std; char a[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>>a[i][j]; } } for(int i=n;i>0;i--){ for(int j=m;j>0;j--){ if(a[i][j]=='#'){ a[i][j+1]='#'; a[i+1][j]='#'; a[i+1][j+1]='#'; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<a[i][j]; } cout<<endl; } return 0; }三、尾声:
这部分看起来根本没用这道题的满分是,所以就会出现的情况······
感谢大家对我的支持,感谢您的浏览,希望能帮助到您,祝您早日犇犇。
By Indifferent
- 1
信息
- ID
- 6665
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者