题目链接

题解 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】的更多相关文章

  1. 【29.70%】【codeforces 723D】Lakes in Berland

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. 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 ...

  3. 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. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  5. 【夯实PHP基础】PHP数组,字符串,对象等基础面面观

    本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...

  6. 【Java学习系列】第3课--Java 高级教程

    本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...

  7. 【夯实PHP基础】nginx php-fpm 输出php错误日志

    本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...

  8. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  9. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. MongoDB shell 1 数据库方法

    方法名 描述 db.cloneDatabase() 从指定主机上克隆数据库 db.currentOp() 显示当前正在进行的操作 db.commandHelp() 返回数据库命令的帮助信息 db.cr ...

  2. v熬夜是场可怕的自杀

    转载于 https://baike.baidu.com/vbaike/%E7%86%AC%E5%A4%9C%E6%98%AF%E5%9C%BA%E5%8F%AF%E6%80%95%E7%9A%84%E ...

  3. rundeck配置salt-api

    Rundeck 安装: 系统: # cat /etc/issue CentOS release 6.7 (Final) 内核: # uname -r -.el6.x86_64 IP 地址: 172.1 ...

  4. Java实现PV操作 | 生产者与消费者

    导语 在学习操作系统的过程中,PV操作是很重要的一个环节.然而面对书本上枯燥的代码,每一个爱好技术的人总是想能亲自去实现.现在我要推出一个专题,专门讲述如何用Java实现PV操作,让操作系统背后的逻辑 ...

  5. 【题解】洛谷 P1449 后缀表达式

    目录 题目 思路 \(Code\) 题目 P1449 后缀表达式 思路 栈.题目说的不是很清楚,没说包含什么操作.除法用整数除法就行. 先string读入字符串,然后从前往后看如果是个数字就入栈,如果 ...

  6. 切比雪夫定理(Chebyshev's theorem)与经验法则(Empirical Rule)

    切比雪夫定理(Chebyshev's theorem):适用于任何数据集,而不论数据的分布情况如何. 与平均数的距离在z个标准差之内的数值所占的比例至少为(1-1/z2),其中z是大于1的任意实数. ...

  7. 我用AI(Adobe Illustrator CS6)合并路径的两个常用方法

    作为一个切图仔,经常与设计大佬的PSD打交道,PSD里面又有各种icon图标需要导出,偷懒的方法直接导出png图片,丢个背景图上页面完美解决问题!! 第二天来个需求,能不能把这个icon图标给我换个颜 ...

  8. HNOI做题记录

    算是--咕完了? 2013.2014的就咕了吧,年代太久远了,并且要做的题还有那么多-- LOJ #2112. 「HNOI2015」亚瑟王 发现打出的概率只和被经过几次有关. 于是\(dp_{i,j} ...

  9. pip命令提示unknow or unsupported command install解决方法

    执行pip命令安装模块,提示unknow or unsupported command install 原因: 使用where pip查看, 电脑中装了loadrunner,存在多个pip,不知道使用 ...

  10. shell 判断大小

    test.sh #!/bin/bash read -p "" a read -p "" b if [ $a -eq $b ];then echo "= ...