acdream 1705(暴力)

题意:有一块n*m大的草坪,’.’表示空地,’x’表示种了棵树,现在要给这块草坪建一个矩形栅栏,栅栏必须建在空地上,问栅栏建好的最大周长是多少,也就是最多占用了多少个空地。

题解:暴力,需要预处理出每个空地右边空地的数量存到r[i][j]和下方空地的数量d[i][j],然后枚举每个空地把它当做栅栏的左上角顶点,根据r和d两个数组得到上和左两条边可能的长度,然后枚举上和左的长度如果下和右也都满足条件(即不出现’x’),更新最大值。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 505;
int n, m;
char g[N][N], r[N][N], d[N][N];

int main() {
    while (scanf("%d%d", &n, &m) == 2) {
        memset(r, 0, sizeof(r));
        memset(d, 0, sizeof(d));
        for (int i = 0; i < n; i++)
            scanf("%s", g[i]);
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++) {
                if (g[i][j] == ‘.‘) {
                    for (int k = j + 1; k < m && g[i][k] != ‘x‘; k++)
                        r[i][j]++;
                    for (int k = i + 1; k < n && g[k][j] != ‘x‘; k++)
                        d[i][j]++;
                }
            }
        int res = 0;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++) {
                if (g[i][j] == ‘.‘) {
                    for (int r1 = r[i][j]; r1 >= 1; r1--)
                        for (int d1 = d[i][j]; d1 >= 1; d1--)
                            if (r[i + d1][j] >= r1 && d[i][j + r1] >= d1)
                                res = max(res, 2 * (r1 + d1));
                }
            }
        if (res >= 4)
            printf("%d\n", res);
        else
            printf("impossible\n");
    }
    return 0;
}
时间: 2024-10-10 02:21:48

acdream 1705(暴力)的相关文章

acdream 1704(暴力)

题意: Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本<AC is not a dream>杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但是有一些数字被隐藏掉了,然后让你根据没有隐藏的数字填出隐藏的数字. 如下图: 然后小晴天二话不说,三下五除二就写出了答案: 然后小晴天就觉得这样的题目太简单了,于是问你是否有办法来求出一道题目有多少种不同的答案呢?(只要有一

acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)

小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 小晴天非常漂亮的后花园,打算以后退休之后在里面种种花,养养草,所以现在小晴天打算为他的后花园围上栅栏. 小晴天的后花园可以看成是一个m*n的矩形,但是其中有一些地方种了树,这些地方都不能安装栅栏,现在小晴天把后花园的平面图告诉你了,请你帮忙设计一个最大的矩形

acdream暴力专场中的优美暴力

F - 小晴天老师系列——苹果大丰收 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买了N个一模一样的箱子,想要把苹果放进去,允许有的箱子是空的,请问小晴天有多少种不同的放法呢? 例如对于4个苹果,3个箱子,2

Acdream 1417 Numbers(暴力枚举)

传送门 Numbers Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Consider numbers from 1 to n. You have to find the smallest lexicographically number among them which is di

ACdream 1195 Sudoku Checker (暴力)

Sudoku Checker Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description Sudoku is a popular single player game. The objective is to fill a 9x9 matrix with digits so that each column, each row, a

[ACDream 1430]SETI 后缀数组

题目链接:http://acdream.info/problem?pid=1430 题目大意:给你一个长度不超过10000的字符串,问你出现过两次或两次以上的不重叠的子串有多少个. 后缀数组计算出height数组出来,然后分组. 如果没有分在一组的话代表两个的前缀是不相同的.于是就可以暴力搞了. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace

acdream 1738 世风日下的哗啦啦族I 分块

世风日下的哗啦啦族I Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Description "世风日下啊,女生不穿裙子的太少了" "这不是社会的进步吗(逃" "哎,是否可以建立一种结构统计一下各学院各专业各班级女生穿裙子的数量以及裙子的长度" "然后查询区间裙子最短值?" "并输出这个区间 穿这个裙

ACDREAM 1726 A Math game(折半枚举+hash)

题目链接: http://acdream.info/problem?pid=1726 题意: 给定n 个数,和一个数看,判断k能否由其中的任意个数的和组成. 分析: 因为n最大为40,暴力枚举所有的情况 复杂度为 2^40 肯定TLE ,然后就想到了折半枚举 分成两半,先处理前n/2个数的组合的情况 ,把所得结果哈希一下,然后再枚举后一半 的所有情况,然后在哈希表里查找.时间复杂度为 O(2^(N/2)); 代码如下: #include <stdio.h> #include <iostr

ACdream oj C - 神奇的%系列一 (水题系列--略坑)

 C - 神奇的%系列一 Time Limit: 6000/3000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) Submit Status Problem Description 在计算机的世界里,%不是百分比,而是除法取余哟! 比如: 4 % 2 = 0 5 % 3 = 2 给你 2<=N<=100000 个数,a[1],a[2]...a[i]...a[n]. 其中:1<=a[i]<=10