CF 732D

原创 2018年04月16日 15:26:15

题目:

n*m的图中有若干个水沟,想填平水沟使其只剩K个,问需要多少个砖。

题解:

爆搜啊不然还想咋地。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

struct Point{
    int x,y;
    Point(){}
    Point(int x,int y){
        this->x=x;
        this->y=y;
    }
};

int n,m,k;
char map[3010][3010];
bool vis[3010][3010];
vector<Point> vec[3010];
vector<int> vvv;

void dfs(int bit,int x,int y){
    if(x<0||x>=n) return ;
    if(y<0||y>=m) return ;
    if(map[x][y]=='*') return ;
    if(vis[x][y]) return ;
    vis[x][y]=1;
    vec[bit].push_back(Point(x,y));
    int ret=0;
    dfs(bit,x+1,y);
    dfs(bit,x-1,y);
    dfs(bit,x,y+1);
    dfs(bit,x,y-1);
}

string str;

bool cmp(vector<Point> a,vector<Point> b){
    return a.size()<b.size();
}

int main(){
    cin>>n>>m>>k;
    for(int i=0;i<n;i++){
        cin>>str;
        for(int j=0;j<m;j++){
            map[i][j]=str[j];
        }
    }
    int bit=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(map[i][j]=='.'&&!vis[i][j]){
                dfs(bit,i,j);
                bit++;
            }
        }
    }
    int ans=0;
    int cnt=0;
    sort(vec,vec+bit,cmp);
    for(int i=0;i<bit;i++){
        bool flag=true;
        for(int j=0;j<vec[i].size();j++){
            if(vec[i][j].x==0||vec[i][j].x==n-1||vec[i][j].y==0||vec[i][j].y==m-1){
                flag=false;
                break;
            }
        }
        if(flag){
            vvv.push_back(i);
        }
    }
    int all=vvv.size();
    for(int i=0;i<vvv.size();i++){
        if(all==k) break;
        int bit=vvv[i];
        ans+=vec[bit].size();
        for(int j=0;j<vec[bit].size();j++){
            map[vec[bit][j].x][vec[bit][j].y]='*';
        }
        all--;
    }
    cout<<ans<<endl;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<map[i][j];
        }
        cout<<endl;
    }
}

codeforces 732D Exams 二分搜索 贪心

D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input...
  • kyoma
  • kyoma
  • 2016-10-19 01:48:05
  • 447

codeforces 732D Exams

题目连接:http://codeforces.com/problemset/problem/732/D 题意:n天,m个考试,n天中的每一天,0代表该天不能考试,其他表示能考哪一门试。m个考...
  • Strokess
  • Strokess
  • 2016-10-18 18:30:08
  • 430

Codeforces732D Exams

D. Exams time limit per test 1 second memory limit per test 256 megabytes input st...
  • overload1997
  • overload1997
  • 2016-10-25 13:54:35
  • 268

codeforces-732D-Exams(二分)

D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input...
  • haut_ykc
  • haut_ykc
  • 2016-10-18 08:09:15
  • 823

732D Exams

题目链接:http://codeforces.com/problemset/problem/732/D题解:题目大意: 给出两个数组,一个大小为n,一个大小为m,前者num1[i]表示的是在哪天可以...
  • silver_bone
  • silver_bone
  • 2017-03-04 09:53:25
  • 94

【打CF,学算法】CodeForces网站简介

转自豆瓣:https://www.douban.com/review/5800694/ 你应当知道的关于Codeforces的事情 关于codeforces的文字 ...
  • David_Jett
  • David_Jett
  • 2016-07-12 10:11:43
  • 2140

易语言模块易语言模块

  • 2010年08月14日 23:20
  • 529KB
  • 下载

CF点充值CF点充值CF点充值CF点充值

  • 2011年03月23日 17:41
  • 674KB
  • 下载

CF与OF有什么区别?

 = 问题 =   CF与OF有什么区别?  -----------------------------------------------------------------------------...
  • w9521423
  • w9521423
  • 2006-10-02 23:07:00
  • 3679

CF卡技术详解——笔记

知识太全面了,摘抄摘不完,还是粘过来加上注释和笔记吧。 重点以及断句用加粗,注释用红括号。 一.CF卡技术及规格 一.CF卡技术及规格   ...
  • huqinweI987
  • huqinweI987
  • 2013-12-04 21:45:54
  • 16767
收藏助手
不良信息举报
您举报文章:CF 732D
举报原因:
原因补充:

(最多只允许输入30个字)