zoukankan      html  css  js  c++  java
  • 十月例题F题

    F - City Game

    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

    Bob is a strategy game programming specialist. In his new city building game the gaming environment
    is as follows: a city is built up by areas, in which there are streets, trees, factories and buildings. There
    is still some space in the area that is unoccupied. The strategic task of his game is to win as much
    rent money from these free spaces. To win rent money you must erect buildings, that can only be
    rectangular, as long and wide as you can. Bob is trying to find a way to build the biggest possible
    building in each area. But he comes across some problems — he is not allowed to destroy already
    existing buildings, trees, factories and streets in the area he is building in.
    Each area has its width and length. The area is divided into a grid of equal square units. The rent
    paid for each unit on which you’re building stands is 3$.
    Your task is to help Bob solve this problem. The whole city is divided into K areas. Each one of
    the areas is rectangular and has a different grid size with its own length M and width N. The existing
    occupied units are marked with the symbol ‘R’. The unoccupied units are marked with the symbol ‘F’.
    Input
    The first line of the input file contains an integer K — determining the number of datasets. Next lines
    contain the area descriptions. One description is defined in the following way: The first line contains
    two integers-area length M ≤ 1000 and width N ≤ 1000, separated by a blank space. The next M
    lines contain N symbols that mark the reserved or free grid units, separated by a blank space. The
    symbols used are:
    R - reserved unit
    F - free unit
    In the end of each area description there is a separating line.
    Output
    For each data set in the input file print on a separate line, on the standard output, the integer that
    represents the profit obtained by erecting the largest building in the area encoded by the data set.
    Sample Input
    2
    5 6
    R F F F F F
    F F F F F F
    R R R F F F
    F F F F F F
    F F F F F F
    5 5
    R R R R R
    R R R R R
    R R R R R
    R R R R R
    R R R R R
    Sample Output
    45
    0

    题解:给定一个m*n的矩阵,其中一些格子是空地(F),其他障碍是(R),找到一个全部由F组成的面积最大的子矩阵,输出其面积乘3的结果

    大致思路,扫描法,扫描他的运动极限。

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char s[2];
        int l[1001],r[1001],d[2][1001];
        int i,j,n,m,t,max,res;
        scanf("%d",&t);
        while(t--)
        {
            memset(d,0,sizeof(d));
            scanf("%d%d",&n,&m);
            res=0;
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    scanf("%s",s);
                    if(s[0]=='F')
                        d[i%2][j]=d[(i-1)%2][j]+1;    //滚动数组
                    else
                        d[i%2][j]=0;
                    l[j]=r[j]=j;
                }
                for(j=2;j<=m;j++)
                {
                    while(l[j]>1&&d[i%2][l[j]-1]>=d[i%2][j])
                        l[j]=l[l[j]-1];
                }  //向左延伸
                for(j=m-1;j>=1;j--)
                {
                    while(r[j]<m&&d[i%2][r[j]+1]>=d[i%2][j])
                        r[j]=r[r[j]+1];
                }  //向右延伸
                max=0;
                for(j=1;j<=m;j++)
                    if((r[j]-l[j]+1)*d[i%2][j]>max)
                        max=(r[j]-l[j]+1)*d[i%2][j];
                if(max>res)
                    res=max;
            }
            printf("%d
    ",res*3);
        }
        return 0;
    }
  • 相关阅读:
    JAVA 面试知识点
    JAVA String.format()的使用
    XorPay.com 支付平台介绍【免费申请个人微信支付接口】
    PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
    个人收款之微信小微商户
    个人小程序接入支付解决方案
    XorPay 个人支付平台增加 个人支付宝支付接口
    Javascript中那些你不知道的事之-- false、0、null、undefined和空字符串
    网页启用Gzip压缩 提高浏览速度
    C/S架构和B/S架构的概念和区别
  • 原文地址:https://www.cnblogs.com/hfc-xx/p/4886236.html
Copyright © 2011-2022 走看看