zoukankan      html  css  js  c++  java
  • 土豪聪要请客

    众所周知,聪哥(ndsf)是个土豪,不过你们不知道的是他的MZ和他的RMB一样滴多……

       某天土豪聪又赚了10^10000e的RMB,他比较开心,于是准备请客。他在自己在XX星上的别墅里面大摆酒席,想要邀请尽可能多的MZ来参加他的宴会。他将会同MZ一起坐在一个巨大的长方形桌子上。这个桌子能坐下的人数等于他的边长。聪哥要求他的桌子能够放进他的别墅,并且桌子的边必须与别墅的边界平行。给定别墅的平面图,请你求出聪哥最多可以请多少个MZ。

    输入格式

    第一行n,m。表示别墅的长宽

    下面n行,每行M个字符,表示一个方块是空的(‘ ’)或是被占用了(‘X’)。

    聪哥只要他的桌子放在别墅里,并且桌子不能占用任何一个已经占用了的方块。

    输出格式

    一个数,表示聪哥最多可以请几个Maze。

    样例输入1

    2 2

    ..

    ..

    样例输出1

    7

    样例输入2

    4 4

    X.XX

    X..X

    ..X.

    ..XX

    样例输出2

    9

    对于60%的数据,n,m<=100

    对于100%的数据,n,m<=400

     两种写法

    #include<cstdio>
    #include<iostream>
    #define N 410
    using namespace std;
    char map[N][N];int s[N][N],n,m;
    int main(){
        //freopen("jh.in","r",stdin);
        freopen("stol.in","r",stdin);
        freopen("stol.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%s",map[i]);
            for(int j=0;j<m;j++){
                if(map[i][j]=='.')s[i][j+1]=1;
                else s[i][j+1]=0;
                s[i][j+1]+=s[i][j];
            }
        }
        int ans=0;
        for(int i=1;i<=m;i++){
            for(int j=i;j<=m;j++){
                int maxp=0,p=0;
                for(int k=1;k<=n;k++){
                    if(s[k][j]-s[k][i-1]==j-i+1)p++;
                    else maxp=max(maxp,p),p=0;
                }
                maxp=max(maxp,p);
                if(maxp)ans=max(ans,2*(j-i+1)+maxp*2);
            }
        }
        printf("%d",ans-1);
        fclose(stdin);fclose(stdout);
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #define N 410
    using namespace std;
    char map[N][N];int n,m,h[N][N],l[N][N],r[N][N];
    int main(){
        //freopen("jh.in","r",stdin);
        freopen("stol.in","r",stdin);
        freopen("stol.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>map[i][j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(map[i][j]=='.')h[i][j]=h[i-1][j]+1;
                else h[i][j]=0;
        int ans=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                for(int k=j-1;k>=1;k--)
                    if(h[i][k]>=h[i][j])l[i][j]++;
                    else break;
                for(int k=j+1;k<=m;k++)
                    if(h[i][k]>=h[i][j])r[i][j]++;
                    else break;
            }
        for(int i=1;i<=n;i++)
              for(int j=1;j<=m;j++){
                  if(!h[i][j])continue;
                  ans=max(ans,(h[i][j]+l[i][j]+r[i][j]+1)*2);
            }
        printf("%d",ans-1);
        return 0;
    }
  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/harden/p/6075664.html
Copyright © 2011-2022 走看看