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 ...
随机推荐
- 《Cracking the Coding Interview》——第5章:位操作——题目3
2014-03-19 05:57 题目:给定一个整数N,求出比N大,而且二进制表示中和N有相同个数的‘1’的最小的数,比如3是‘11’,接下来的5是‘101’,再接下来的6是‘110’. 解法:从低位 ...
- loadrunner检查点设置失败,日志中SaveCount无法被正常统计出来
在脚本正确的情况下的web_reg_find检查点检查失败,SaveCount无法被正常统计出来. 在检查项Text为中文的情况下, ******(我是被录制下来的代码) web_reg_find(& ...
- WIN10把照片查看器设为默认看图软件
WIN10默认是PHOTO,没有以前WIN7的照片查看器好用,要改回来的方法如下: 在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo ...
- Convert.ToBase64String(Byte[])和Encoding.UTF8.GetString(Byte[])的区别
Encoding.UTF8.GetString是针对使用utf8编码得到的字符串对应的byte[]使用,可以还原我们能看懂的字符串而Convert.ToBase64String是对任意byte[]都可 ...
- win10&hyper上装Ubuntu出现没有找到dev fd0, sector 0 错误
win10 hyper装 ubuntu blk_update_request:I/O error,dev sr0,sector0 错误 配置好安装重启后出现 blk_update_request: I ...
- idea中maven项目放到包中的mapper的xml文件不发布的问题
今天重新一下mybatis的基础,然后一直报错,提示的是 result map 找不到com.zm.model.User对象可是看 mapper的写法没问题.找了半天才发现 是mapper没扫描到 解 ...
- quagga源码学习--BGP协议中的routemap
路由策略的基础知识 定义 路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径. 目的 路由器在发布. ...
- CSLA多语言设置
1.在程序运行文件夹例如“\Bin\Debug\”中包含csla生成的资源文件: 2.在程序运行时,设置CSLA的当前语言为你想要的语言,例如:Csla.Properties.Resources.Cu ...
- 【转载】10个最佳ES6特性
译者按: 人生苦短,我用ES6. 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 译者: Fundebug 为了保证 ...
- css控制文字模糊
*{ color: transparent; text-shadow: #111 0 0 5px; }