专栏文章
题解:AT_abc383_b [ABC383B] Humidifier 2
AT_abc383_b题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqcaw5q
- 此快照首次捕获于
- 2025/12/04 02:27 3 个月前
- 此快照最后确认于
- 2025/12/04 02:27 3 个月前
思路
暴力出奇迹~~
暴力枚举万岁~~
观察到 且 , 都不会炸,于是考虑暴力枚举。
先枚举第一个加湿器的位置 ,再枚举第二个加湿器的位置 ,接着遍历地板,找出当第一个加湿器的位置为 ,第二个加湿器的位置为 时加湿的空地数,所有情况取最大值后输出。
时间复杂度 。
具体细节看代码吧!
暴力枚举万岁~~
观察到 且 , 都不会炸,于是考虑暴力枚举。
先枚举第一个加湿器的位置 ,再枚举第二个加湿器的位置 ,接着遍历地板,找出当第一个加湿器的位置为 ,第二个加湿器的位置为 时加湿的空地数,所有情况取最大值后输出。
时间复杂度 。
具体细节看代码吧!
代码
CPP#include<bits/stdc++.h>
#define ll long long
#define pp pair<int,int>
using namespace std;
int n,m,d,ans;
char a[15][15];
int sum(int xa,int ya,int xb,int yb){
return abs(xa-xb)+abs(ya-yb);
}
//计算曼哈顿距离
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>d;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)cin>>a[i][j];
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
//枚举第一个加湿器位置
if(a[i][j]=='#')continue;
//不是地板,不继续
for(int k=1;k<=n;++k){
for(int l=1;l<=m;++l){
//枚举第二个加湿器位置
if(a[k][l]=='#'||k==i&&l==j)continue;
//不是地板,不继续
//两个加湿器位置相等,不继续
int s=0;
for(int x=1;x<=n;++x){
for(int y=1;y<=m;++y){
//遍历地板
if(a[x][y]=='#')continue;
//不是地板,不继续
if(sum(i,j,x,y)<=d||sum(k,l,x,y)<=d)++s;
//若曼哈顿距离小于d,增加加湿的空地数
}
}
ans=max(ans,s);//取最大值
}
}
}
}
cout<<ans<<"\n";
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...