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快速入门之安全策 ...
随机推荐
- H5实现横向滚动的方法总结
小程序中有横向滚动的swiper,H5中目前得手动实现. 实现方法如下: 外层需要设置: overflow: scroll;white-space: nowrap; 内层需要设置: display: ...
- Hibernate的批量查询——Criteria查询所有、条件、分页、统计(聚合函数)、排序
1.查询所有的学生信息: public static void testSel() { Session session = HibernateUtils.openSession(); Transact ...
- 微信小程序 自定义导航组件 nav头部 全面屏设计
nav-dynamic 微信小程序自定义nav头部组件:适配全面屏设计: 实现功能 初始进入页面时,展示初始状态下的nav样式: 页面滚动时,监听页面滚动事件,展示滚动状态下的nav样式: 根据配置字 ...
- ELK实时日志分析平台环境部署,以及可视化展示
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent) ...
- java并发编程(四) 线程池 & 任务执行、终止源码分析
参考文档 线程池任务执行全过程:https://blog.csdn.net/wojiaolinaaa/article/details/51345789 线程池中断:https://www.cnblog ...
- redis集群搭建及启动、停止、重启操作【转】
redis版本:redis-5.0.3.tar.gz 操作系统:完全新安装的centos7.6系统 使用一台虚拟机模拟6个redis节点,3个master,3个slave,虚拟机IP为192.168. ...
- easyui datagrid合并相同数据的单元格。
/** * 根据作用域填充单元格 */ function mergeCellsByField(tableID, colList) { var ColArray = colList.split(&quo ...
- 【vue】解决npm run build失败问题
问题说明: 首先,npm run build失败的原因大部分都是因为webpack的子库和webpack的版本号不对应的问题
- pd.ExcelWriter(to_excel)保存结果到已存在的excel文件中
网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...
- ES6 - 解构(数组和对象)
解构对象 /** * 解构:快捷,方便 * * 对象解构 */ { var expense = { type: "es6", amount: "45" }; / ...