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快速入门之安全策 ...
随机推荐
- yarn和npm的对比,以及项目中使用方式
相比npm 的优点 1.npm安装是串行,而yarn是并行,速度大大提升 2.已经下载过的包会被缓存,无需重复下载,更关键的是,支持离线安装 3.精准的版本控制,加上验证每个包的完整性,保证每次安装的 ...
- 一起学Makefile(一)
make和makefile makefile文件帮助我们记录了整个项目工程的所有需要编译的文件列表,这样我们在编译时仅需要输入简单的make命令就能编译出我们期望的结果. makefile文件反映了整 ...
- 如果用了flex去加一个箭头怎么让他剧中
左边是做了一个flex:1 右边是span的display:inline-block样式 父元素 .search-car-arrow display flex align-items center' ...
- 第01组 Alpha冲刺(2/6)
队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11861798.html 作业博客: https://edu.cnblogs.com/campus/fz ...
- 图片上传: ajax-formdata-upload
传送门:https://www.cnblogs.com/qiumingcheng/p/6854933.html ajax-formdata-upload.html <!DOCTYPE html& ...
- kotlin基础 字符串比较 equal
strring.equal(str,boolean) boolean=False,默认值,区分大小写 boolean=True,不区分大小写
- python工程设置工具(pipenv)
原始安装 pip工具 --- 包安装工具, 可以从Python包索引hub上安装,也可以使用自定义的hub. 命令: pip install xxx 缺点: 1.命令方式, 一次只能安装一个包, 对于 ...
- Spring Boot入门学习,解决复杂的spring配置文件及jar包
转载:https://www.cnblogs.com/wmyskxz/p/9010832.html 总结 为何出了这样的框架? Spring Boot 是所有基于 Spring 开发的项目的起点.Sp ...
- vSphere SDK for Java - 为虚拟机添加磁盘
示例代码: import com.vmware.vim25.*; import com.vmware.vim25.mo.*; import org.springframework.stereotype ...
- OpenShift 4.2 Service Mesh
1.和社区版Istio的区别 OpenShift 4.2的Service Mesh和upstream的Istio项目的增强,除了产品化之外,借用官方文档,区别在于: Red Hat OpenShift ...