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;
    }
  • 相关阅读:
    Consul负载均衡策略记录
    ASP NET CORE开发优化相关专用随笔
    .NET CORE 3.1配置文件读取方式
    CentOS 8 安装.NET CORE 3.1 发布以及运行
    CORE EF生成ORACLE数据库模型报错问题记录
    【转载】一名程序员十年技术之路的思考与感悟
    iview-admin部署linux nginx报500错误的问题记录
    [转]浅谈账号系统设计
    C#使用phantomjs,爬取AJAX加载完成之后的页面
    nginx触屏版跟PC的代理设置
  • 原文地址:https://www.cnblogs.com/harden/p/6075664.html
Copyright © 2011-2022 走看看