codeforces-723D
题目连接:http://codeforces.com/contest/723/problem/D
2 seconds
256 megabytes
standard input
standard output
The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cell is either land or water. The map is surrounded by the ocean.
Lakes are the maximal regions of water cells, connected by sides, which are not connected with the ocean. Formally, lake is a set of water cells, such that it's possible to get from any cell of the set to any other without leaving the set and moving only to cells adjacent by the side, none of them is located on the border of the rectangle, and it's impossible to add one more water cell to the set such that it will be connected with any other cell.
You task is to fill up with the earth the minimum number of water cells so that there will be exactly k lakes in Berland. Note that the initial number of lakes on the map is not less than k.
The first line of the input contains three integers n, m and k (1 ≤ n, m ≤ 50, 0 ≤ k ≤ 50) — the sizes of the map and the number of lakes which should be left on the map.
The next n lines contain m characters each — the description of the map. Each of the characters is either '.' (it means that the corresponding cell is water) or '*' (it means that the corresponding cell is land).
It is guaranteed that the map contain at least k lakes.
In the first line print the minimum number of cells which should be transformed from water to land.
In the next n lines print m symbols — the map after the changes. The format must strictly follow the format of the map in the input data (there is no need to print the size of the map). If there are several answers, print any of them.
It is guaranteed that the answer exists on the given data.
5 4 1*****..*******.*..**
1*****..*********..**
3 3 0****.****
1*********题目大意:给定一个矩阵,"*"代表陆地,"."代表水。定义被陆地包围且不与边界连接的水为湖泊,与边界连接就算为海洋,连续的水域算一片湖泊。要求填住一定量的湖泊,使得剩下的湖泊数量为要求的值,求最少要填多少面积(一格面积为1)以及填完后的矩阵。解题思路:要填湖,先要找湖,而找湖的过程是很典型的dfs的应用,寻找连续水域,所以dfs解决,并将湖泊的信息(面积,起始点)存在数组中。然后要求最少面积,直接贪心解决,把之前得到的湖泊的信息从小到大排序,逐个删除,使剩余湖泊数量达到要求即可。删除方式为再跑一遍dfs。 代码如下:
#include<bits/stdc++.h> using namespace std; struct data { int a,b; int res; }; ,ans=; ; ][]; ][]= {}; data ss[]; ]= {,,,-,,}; ]= {,,,,-,}; bool comp(const data &a,const data &b) { return a.res<b.res; } void dfs(int x,int y) { ||x==m-||y==||y==n-)) { flag=; return; } vis[x][y]=; ans++; ; u<=; u++) { int a=x+fx[u]; int b=y+fy[u]; if(g[a][b]!='*'&&!vis[a][b]) dfs(a,b); } } void dfs1(int x,int y) { if(g[x][y]=='*') return; ||x==m-||y==||y==n-) return; g[x][y]='*'; ; u<=; u++) { int a=x+fx[u]; int b=y+fy[u]; dfs1(a,b); } } int main() { ]; ; scanf("%d%d%d",&m,&n,&k); ; i<m; i++) { scanf("%s",a); ; j<n; j++) g[i][j]=a[j]; } ; i<m-; i++) { ; j<n-; j++) { if(g[i][j]!='*'&&!vis[i][j]) { flag=; ans=; dfs(i,j); if(flag) { ss[sum].a=i; ss[sum].b=j; ss[sum].res=ans; sum++; } } } } sort(ss,ss+sum,comp); sum=sum-k; ; i<sum; i++) { dfs1(ss[i].a,ss[i].b); r+=ss[i].res; } cout<<r<<endl; ; i<m; i++) { ; j<n; j++) cout<<g[i][j]; cout<<endl; } }
最近一直在做dfs,提高自己对于递归过程的思维能力,但是迄今为止仍觉得不足,需要更努力才行,加油干吧。
codeforces-723D的更多相关文章
- codeforces 723D(DFS)
题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...
- 【Codeforces 723D】Lakes in Berland (dfs)
海洋包围的小岛,岛内的有湖,'.'代表水,'*'代表陆地,给出的n*m的地图里至少有k个湖,求填掉面积尽量少的水,使得湖的数量正好为k. dfs找出所有水联通块,判断一下是否是湖(海水区非湖).将湖按 ...
- codeforces 723D: Lakes in Berland
Description The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × ...
- Codeforces 723d [暴力dfs]
/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给n,m和k,n和m为所给矩阵的高和宽.k是要求最多剩下的湖的数量. 在所给的矩阵中,*代表陆地,.代表水. 湖的定义是一片连续的水(上下左右四 ...
- CodeForces 723D Lakes in Berland (dfs搜索)
题意:给定一个n*m的矩阵,*表示陆地, . 表示水,一些连通的水且不在边界表示湖,让你填最少的陆地使得图中湖剩下恰好为k. 析:很简单的一个搜索题,搜两次,第一次把每个湖的位置和连通块的数量记下来, ...
- Codeforces 723D. Lakes in Berland
解题思路: 1.dfs所有的水,顺便计数大小并判断是不是湖. 2.如果是湖,将大小和坐标存下来. 3.对湖按大小从小到大排序. 4.dfs前(湖的数量-k)个湖,用*填充这些湖. 代码: #inclu ...
- 【29.70%】【codeforces 723D】Lakes in Berland
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
随机推荐
- Httpclient httpdelete 参数
Httpclient 中常用的请求有2个,HttpPost 和 HttpGet,今天在对某个网站进行分析的时候,突然发现用到了 HttpDelete,并且传参 是 Json. 1.一般 HttpPos ...
- ITIBB原创,互联网首部自媒体小说《1024伐木累》-小白篇之入职-总章节一
小序 IT人不懂爱?代码汪是小白?又有谁,懂我情怀? 逗比青年,背上行囊,懵懵懂懂闯帝都!前途似海,来日方长! 青春无梦妄少年!认定就作,不平就说,碰撞火花,如此绚烂…… IT人有比格?其实,那是顽强 ...
- 《算法》C++代码 Floyd
今天写写最短路径的Floyd算法(有翻译叫弗洛伊德,不过这奇葩翻译用来读读就好……). 这个算法的实质,广义来讲,其实是DP(动态规划).其实按说,算法应该先说说什么贪心.搜索.DP.二分之类的基本算 ...
- SpringMVC 整合 kaptcha(验证码功能)
一.添加依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptch ...
- Oracle 学习---- 练习语法 循环( loop end loop; for ;while; if elsif end if )
/*--set serveroutput on;declare mynum number(3) :=0; tip varchar2(10):='结果是 ';begin mynum:=10+100; d ...
- 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库
孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...
- 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作
孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...
- mac book pro 安装keras (无gpu)
转自http://www.jianshu.com/p/01dc42595733 注:Macbook pro 13' 没有NVIDIA的显卡,没办法CUDA编程,所以下面都是CPU编程. 1. 安装ho ...
- qemu中是怎么模拟的新的设备
kvm_cpu_exec 和demo中演示的一样
- 块元素包裹img空隙问题
解决方法 1.img设为block2.img对齐方式vertical-align:bottom(middle/top),不是baseline就行3.父容器font-size:0或line-height ...