CF723D 【Lakes in Berland】
题目链接
题解 CF723D 【Lakes in Berland】
首先将边界的水用bfs处理掉
再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点
将湖泊排序从小往大填满,并利用开始点进行bfs改变地图
细节见代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int vis[][],mapp[][];
int dx[]={,-,,,};
int dy[]={,,,,-},cnt;
struct SYM{
int cc,sx,sy;
}lake[];
void bfs(int x,int y,int opt){
queue<int> qx,qy;int siz=;
if(opt==){ //处理边界
vis[x][y]=;qx.push(x);qy.push(y);
while(!qx.empty()){
int xx=qx.front(),yy=qy.front();qx.pop();qy.pop();
for(int i=;i<=;i++){
int nx=xx+dx[i],ny=yy+dy[i];
if(nx==||ny==||nx==n+||ny==m+) continue;
if(vis[nx][ny]) continue;
vis[nx][ny]=;
qx.push(nx);qy.push(ny);
}
}
}
if(opt==){ //处理湖泊
vis[x][y]=;qx.push(x);qy.push(y);
while(!qx.empty()){
int xx=qx.front(),yy=qy.front();qx.pop();qy.pop();
siz++;
for(int i=;i<=;i++){
int nx=xx+dx[i],ny=yy+dy[i];
if(nx==||ny==||nx==n+||ny==m+) continue;
if(vis[nx][ny]) continue;
vis[nx][ny]=;
qx.push(nx);qy.push(ny);
}
}
lake[++cnt].cc=siz;lake[cnt].sx=x;lake[cnt].sy=y; //存入湖泊大小和开始点
}
if(opt==){ //改变地图
mapp[x][y]=;qx.push(x);qy.push(y);
while(!qx.empty()){
int xx=qx.front(),yy=qy.front();qx.pop();qy.pop();
siz++;
for(int i=;i<=;i++){
int nx=xx+dx[i],ny=yy+dy[i];
if(nx==||ny==||nx==n+||ny==m+) continue;
if(mapp[nx][ny]) continue;
mapp[nx][ny]=;
qx.push(nx);qy.push(ny);
}
}
}
}
bool cmp(const SYM &a,const SYM &b){
return a.cc>b.cc;
}
int main(){
char c[];
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++){
scanf("%s",c);
for(int j=;j<m;j++)
mapp[i][j+]=vis[i][j+]=(c[j]=='*');
}
for(int i=;i<=n;i++){ //处理边界水
if(mapp[i][]==&&vis[i][]==) bfs(i,,);
if(mapp[i][m]==&&vis[i][m]==) bfs(i,m,);
}
for(int i=;i<=m;i++){
if(mapp[][i]==&&vis[][i]==) bfs(,i,);
if(mapp[n][i]==&&vis[n][i]==) bfs(n,i,);
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(!vis[i][j]) bfs(i,j,);
sort(lake+,lake+cnt+,cmp); //湖泊按大小排序
int ans=;
while(cnt>k){ //填湖泊
ans+=lake[cnt].cc;
bfs(lake[cnt].sx,lake[cnt].sy,); //改地图
cnt--;
}
printf("%d\n",ans);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mapp[i][j]==) printf("*");
else printf(".");
}
printf("\n");
}
return ;
}
CF723D 【Lakes in Berland】的更多相关文章
- 【29.70%】【codeforces 723D】Lakes in Berland
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- cf723d Lakes in Berland
The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cel ...
- CF723D. Lakes in Berland[DFS floodfill]
D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【夯实PHP基础】PHP数组,字符串,对象等基础面面观
本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...
- 【Java学习系列】第3课--Java 高级教程
本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...
- 【夯实PHP基础】nginx php-fpm 输出php错误日志
本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- Falcor 学习一基本使用
falcor 是netflix 公司为了解决自己api数据查询所开发的查询框架,很不错(尽管netflix 也在用graphql )以下是falcor 的 一个简单使用,基于express 框架,使用 ...
- 框架入门经典项目TodoMVC
一.项目介绍 ①地址:http://todomvc.com/ ②GitHub下载模板 ③通过npm下载模板的样式 ④通过npm下载Vuejs ⑤项目文件,主要修改app.js和index.html两个 ...
- [RN] React Native FlatList跳转到顶部/底部
React Native FlatList跳转到顶部/底部 核心代码如下: <ScrollView showsVerticalScrollIndicator={false} contentCon ...
- 总结TCP与UDP的区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认.窗口.重传.拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源. TCP的缺 ...
- 【luoguP3000】 [USACO10DEC]牛的健美操Cow Calisthenics
题目链接 二分答案,判断需要断几条边,用\(f[i]\)表示以\(i\)为根的子树断边后的最长路径,对于一个点\(u\),存在\(f[v]>mid\)时就删到\(v\)的边\(f[v1]+f[v ...
- PTES渗透测试执行标准
渗透测试注意事项: 1:测试一定要获得授权方才能进行,切勿进行恶意攻击 2:不要做傻事 3:在没有获得书面授权时,切勿攻击任何目标 4:考虑你的行为将会带来的后果 5:天网恢恢疏而不漏 渗透测试执行标 ...
- 转载:关于思科交换机、路由器如何关闭telnet 开启ssh服务
等保测评要求: 必须关闭telnet服务,开启ssh服务 即用ssh方式登录网络设备,而不允许用telnet. 输入密码.en 再次输入密码.sh run 这些常规动作就不再赘述. 1.关闭telne ...
- docker之修改存储位置
#停止docker 1.systemctl stop docker 2.mkdir /home/docker-lib #在我这个项目里home是普通硬盘,在home下创建一个目录3.mv /var ...
- 【转】Rocketmq整体分析
原文:https://www.cnblogs.com/mantu/p/6108645.html 之前本人在实际的生产环境中,使用过activemq和rabbitmq消息队列,在使用过程中出现一些难以解 ...
- opencv 图像resize
这是文档中的函数原型 cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) 参数说明src:要resize的原图,应该是一个矩阵 dsi ...