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

Dea_He
凉仙贝!你就是一只可可爱爱的蓝莓巧克力小蛋糕(❁´◡`❁)搬运于
2025-08-24 22:34:38,当前版本为作者最后更新于2021-11-20 23:20:53,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我们可以想出:陨石下降的距离是陨石与地面的最小空气距离。
那么,代码就很简单了!
#include<bits/stdc++.h> using namespace std; int r,s,a[3010],b[3010],q=3010;//r行c列 char c[3010][3010]; int main() { scanf("%d%d",&r,&s); for (int i=1;i<=r;i++) { for (int j=1;j<=s;j++) { scanf(" %c",&c[i][j]);//输入字符 if (c[i][j]=='X') a[j]=i;//a[j]表示陨石底部在j列上的位置 if (c[i][j]=='#' && !b[j]) b[j]=i;//b[j]表示地面顶部在j列上的位置 } } for (int i=1;i<=s;i++) { if (a[i]==0) continue;//需要特判一下,如果这一列上没有陨石,就不需要求陨石到地面的距离 q=min(b[i]-a[i]-1,q);//求陨石到地面的距离的最小值 } for (int i=r;i>=1;i--) { for (int j=s;j>=1;j--) { if (c[i][j]=='X') c[i+q][j]='X',c[i][j]='.';//模拟陨石下降的过程,注意从下往上遍历,防止遍历重复,你也可以重新开一个数组存储 } } for (int i=1;i<=r;i++) { for (int j=1;j<=s;j++) { printf("%c",c[i][j]);//简单的输出字符 } printf("\n"); } return 0; }
- 1
信息
- ID
- 7283
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者