首页 > 其他 > 详细

E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)

时间:2019-12-04 16:57:36      阅读:128      评论:0      收藏:0      [点我收藏+]

题:https://codeforces.com/contest/1262/problem/E

分析:预处理出阵列中的矩阵,然后二分答案还原题目的烧火过程,判断是否满足要求

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
const int M=1e6+5;
int main(){
    int n,m;
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n>>m;
    vector<string>a(n);
    vector<vector<int>> b(n,vector<int>(m));

    for(int i=0;i<n;i++)
        cin>>a[i];
    ///找出矩阵
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(a[i][j]==.) b[i][j]=0;
            else if(i==0 || j==0) b[i][j]=1;
            else b[i][j]=min(b[i-1][j-1],min(b[i-1][j],b[i][j-1]))+1;
    int l=0,r=1e6;
    vector<vector<int>> c(n,vector<int>(m));
    while(r-l>1)
    {
        int mid=(l+r) >> 1;
        int x=2*mid+1;
        bool flag=true;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                if(b[i][j]>=x) c[i][j]=x;
                else c[i][j]=0;
        ///还原矩阵
        for(int i=n-1;i>=0;i--)
            for(int j=m-1;j>=0;j--)
            {
                if(i>0) c[i-1][j]=max(c[i-1][j],c[i][j]-1);
                if(j>0) c[i][j-1]=max(c[i][j-1],c[i][j]-1);
                if(i>0 && j>0) c[i-1][j-1]=max(c[i-1][j-1],c[i][j]-1);
            }
        ///与原图进行判断
        
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(b[i][j]==0) continue;
                if(c[i][j]==0) flag=false;
            }
        if(flag) l=mid;
        else r=mid;
    }
    cout<<l<<endl;
    int x=2*l+1;
    vector<string> ans(n,string(m,.));
    for(int i=0;i<n;i++)
    for(int j=0;j<m;j++){
        if(b[i][j]>=x){
            ans[i-l][j-l]=X;
        }
    }
    for(int i=0;i<n;i++){
        cout<<ans[i]<<\n;
    }

    return 0;
}
View Code

 

E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)

原文:https://www.cnblogs.com/starve/p/11983906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!