http://codeforces.com/problemset/problem/723/D

dfs找出每个湖,保存坐标和大小,按大小排序,填充湖即可,注意湖的数量最多会有1250个。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define INF 0x3f3f3f3f
using namespace std; int n,m,k,dir[][] = {-,,,-,,,,},ok,cnt = ,sizee,vis[][] = {};
char mp[][]; struct lake
{
int x,y,cnt;
}l[]; bool cmp(struct lake a,struct lake b)
{
return a.cnt < b.cnt;
} void dfs1(int x,int y)
{
vis[x][y] = ;
sizee++;
for(int i = ;i < ;i++)
{
int xx = x+dir[i][],yy = y+dir[i][];
if(xx < || yy < || xx >= n || yy >= m)
{
ok = ;
continue;
}
if(mp[xx][yy] == '*' || vis[xx][yy]) continue; dfs1(xx,yy);
}
} void dfs2(int x,int y)
{
mp[x][y] = '*';
for(int i = ;i < ;i++)
{
int xx = x+dir[i][],yy = y+dir[i][];
if(xx < || yy < || xx >= n || yy >= m) continue;
if(!vis[xx][yy]) continue;
vis[xx][yy] = ;
dfs2(xx,yy);
}
} int main()
{
scanf("%d%d%d",&n,&m,&k);
getchar();
int x = ;
while(gets(mp[x++]));
for(int i = ;i < n;i++)
{
for(int j = ;j < m;j++)
{
sizee = ;
ok = ;
if(mp[i][j] == '.' && !vis[i][j])
{
dfs1(i,j);
if(ok)
{
l[cnt].x = i;
l[cnt].y = j;
l[cnt++].cnt = sizee;
}
}
}
}
sort(l,l+cnt,cmp);
int endd = cnt-k,ans = ;
for(int i = ;i < endd;i++)
{
ans += l[i].cnt;
dfs2(l[i].x,l[i].y);
}
printf("%d\n",ans);
for(int i = ;i < n;i++) puts(mp[i]);
return ;
}

Codeforces_723_D的更多相关文章

随机推荐

  1. P2722 总分 Score Inflation (完全背包模板)

    题目传送门:P2722 总分 Score Inflation 题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时 ...

  2. Vim区块选择

    区块选择的按键意义: 区块选择的按键意义 v 字符选择,光标经过的地方反白 V 列选择,光标经过的列反白 [ctrl]+v 区块选择,可以用长方形的方式选择资料 d 将发白的地方删除掉 y 将反白的地 ...

  3. FUTABA舵机参数大全

    S9150 Digital servo 尺寸:47.5X27X25.3mm 重量:53g 速度:0.18sec/60"(4.8V) 扭力:5.8kg:cm(4.8V) ——————————— ...

  4. Spring Cloud Alibaba Nacos

    1. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 为分布式应用程序开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使得你可以轻松地使用 ...

  5. js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)

    在开发公司管理后台系统时,遇到了需要根据不同的时间段如"近一年.近半年.近三月.近一月.近一周"来获取并展示不同图表数据的需求,很是繁琐,项目开发周期又非常的短,自己想了一下,虽然 ...

  6. Sentinel :微服务哨兵

    1. Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentin ...

  7. 【转】20个简化开发任务的 JavaScript库

    原文出处: codegeekz   译文出处: oschina 所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 J ...

  8. Linux 7.5 SSH服务和SFTP服务分离

    SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像是一个服务器程序,而更像是一个客户端程序. ...

  9. git 工作实用创建删除分支

    一.创建分支 .创建本地分支并切换 git checkout -b dev_wt2 .创建切换并关联远程分支 git checkout -b dev_wt3 orgin/dev_wt3 .创建远程分支 ...

  10. HBase的安装、配置与实践

    本教程运行环境是在Ubuntu-64位系统下,HBase版本为hbase-1.1.2,这是目前已经发行的已经编译好的稳定的版本,带有src的文件是未编译的版本,这里我们只要下载bin版本hbase-1 ...