zoukankan      html  css  js  c++  java
  • 题解 P4417 【[COCI2006-2007#2] STOL】

    评分感觉有点怪,要是数据范围给大点(例如1000)蓝题是刚好的。

    提供一个思路,首先枚举桌子左下角的点,然后枚举桌子的长度,预先处理出当前点上面的最接近的墙或者上边界的距离,然后桌子的宽度是左下角的点往右延伸到的点的值取最小。时间复杂度是(O(n^3))

    具体实现和其他解释在代码里,如下。

    #include<bits/stdc++.h>
    using namespace std;
    int r,s,wsi[405][405],ans;//wsi数组保存这个点上方最接近的墙或者上边界与该点的距离
    char inp;
    bool cal[405][405];//保存该点是否是空地
    int area(int x,int y){
        int len=2147483647,res=0;
        for(int j=y;j<=s&&cal[x][j];j++){//一直延伸到遇到墙或者右边界
            len=min(len,wsi[x][j]);//宽度对这些点的wsi值取min。
            res=max(res,len*2+(j-y+1)*2);
        }
        return res;
    }
    int main(){
        cin>>r>>s;
        for(int i=1;i<=r;i++)
            for(int j=1;j<=s;j++){
                cin>>inp;
                if(inp=='.')
                    cal[i][j]=1;
            }
        for(int j=1;j<=s;j++){
            int up=0;
            for(int i=1;i<=r;i++){
                if(cal[i][j])//该点是空地?距离值++:距离值=0;
                    up++;
                else up=0;
                wsi[i][j]=up;
            }
        }
        for(int i=1;i<=r;i++)
            for(int j=1;j<=s;j++)
                if(cal[i][j])
                    ans=max(ans,area(i,j)-1);//ans对以每个点为左下角能够得到的最大周长值取max
        cout<<ans;
    }
    
  • 相关阅读:
    Django 想要单独执行文件
    Django基础
    Bootstrap框架
    Font Awesome矢量图标框架
    js函数式编程——蹦床函数
    ie被hao.360劫持的解决方法
    函数式编程——惰性链
    你可能不知道的BFC在实际中的应用
    高度随宽度适应的响应式方案
    腾讯云播放器更新——TCplayer
  • 原文地址:https://www.cnblogs.com/Schwarzkopf-Henkal/p/11775583.html
Copyright © 2011-2022 走看看