UVA - 1419 Ugly Windows

题目大意:给出一张图,模仿电脑窗口,问有哪些窗口未被其他窗口覆盖。

解题思路:水题。按顺序枚举字母,在地图中找到第一个该字母的点,向右向下搜索。最后看能不能构成右下角。唯一要注意的是,窗口可能会嵌套tc。要判断窗口中有没有其他字母。

#include <cstdio>

int main() {
    char s[110][110];
    int n, m;
    while (scanf("%d%d", &n, &m) && n + m) {
        int ans[40] = {0};
        for (int i = 0; i < n; i++)
            scanf("%s", s[i]);

        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                if (s[i][j] != ‘.‘) {
                    int left = 0, right = 0, up = 0, down = 0, flag = 1;
                    char C = s[i][j];
                    for (int k = j; k < m && s[i][k] == C; k++)
                        up++;
                    for (int k = i; k < n && s[k][j] == C; k++)
                        left++;
                    for (int k = i; k < n && s[k][j+up-1] == C; k++)
                        right++;
                    for (int k = j; k < m && s[i+left-1][k] == C; k++)
                        down++;

                    for (int p = i + 1; p < i + left - 1; p++)
                        for (int q = j + 1; q < j + up - 1; q++)
                            if (s[p][q] != ‘.‘)
                                flag = 0;

                    if (left == right && up == down && left > 2 && up > 2 && flag)
                        ans[C-‘A‘] = 1;
                }

        for (int i = 0; i < 26; i++)
            if (ans[i])
                printf("%c", i + ‘A‘);
        printf("\n");

    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 19:35:07

UVA - 1419 Ugly Windows的相关文章

1419 - Ugly Windows(暴力枚举)

题目链接 题意:在一个界面上有多个窗口,求没有被其他窗口覆盖的窗口的个数. 思路:直接暴力枚举每个窗口的长和宽,以确定右下角是否与左上角相同,如果相同再判断矩形内部有没有被其他窗口覆盖到,注意边界覆盖也是算被覆盖到. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 10

uva 618 - Doing Windows(暴力+数学)

题目链接:uva 618 - Doing Windows 题目大意:给出电脑桌面的大小W和H,现在在桌面上有4个窗口,给出窗口的初始大小,问说能不能通过调整各个窗口的大小(长宽比例不能变)使得4个屏幕刚好占满整个屏幕,并且互相不覆盖. 解题思路:其实可以直接暴力出所有情况,不过细节比较多,而且要考虑所有的细节. 我的做法的是先将4个窗口缩小至最小的状态,然后枚举左下角的窗口, 有四种可能 蓝色部分为另外枚举的窗口,3,4种情况要分别保证说长.宽相等,然后S部分就是子问题. 所以用一个二进制数来表

UVA 618 - Doing Windows(数论)

题目链接:618 - Doing Windows 题意:给定一个大小不能变的屏幕,和四个大小可以变的窗口,变化要保持长宽比,问这四个窗口能不能调整后全部放下正好填满屏幕,不能重叠 思路:情况一共就几种:4个叠一起,3个叠一起+一个,2个和2个,一个和两个叠一起在一个,把这几种情况全判断了就可以了,判断过程利用gcd,lcm可以求边长. 代码: #include <stdio.h> #include <string.h> long long gcd(long long a, long

【HDOJ】2487 Ugly Windows

暴力解. 1 #include <cstdio> 2 #include <cstring> 3 4 #define MAXN 105 5 6 char map[MAXN][MAXN]; 7 char visit[27]; 8 int n, m; 9 10 bool check(char c) { 11 int i, j; 12 int x1=MAXN, y1=MAXN, x2=-1, y2=-1; 13 14 for (i=0; i<n; ++i) { 15 for (j=0

POJ 3923 &amp; HDU 2487 Ugly Windows(模拟)

题目链接: PKU:http://poj.org/problem?id=3923 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2487 Description Sheryl works for a software company in the country of Brada. Her job is to develop a Windows operating system. People in Brada are incredibly cons

HDU 2487 Ugly Windows

欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Ugly Windows Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1481    Accepted Submission(s): 591 Problem Description Sheryl works for a software company in the c

Ugly Windows

poj3923:http://poj.org/problem?id=3923 题意:给出两个整数n.m表示屏幕的长宽.屏幕上有一些窗口,每个窗口都是矩形的,窗口的边框用同一个大写字母来表示,不同的窗口的大写字母必定不同. 由于窗口的重叠,有些窗口的有些部分被其他窗口覆盖.但是,肯定有一些窗口在最顶端,不被其他任何窗口覆盖.我们称这些窗口为“顶端窗口”.你的任务就是找出所有的顶端窗口. 题解:简单的模拟.结果我错了很多次啊.首先,没有考虑到边框的内部一定要是'.',然后是最坑就是每个窗口的高度和宽

hdu 2487 Ugly Windows 模拟

#include <cstdio> #include <iostream> #include <cstring> #include <vector> using namespace std; char map[110][110]; int n,m; #define inf 100000 struct node { int x,y; }; vector <node> nn; int main() { while(1) { int i,j,k; sc

POJ 3923 &amp;amp; HDU 2487 Ugly Windows(模拟)

题目链接: PKU:http://poj.org/problem? id=3923 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2487 Description Sheryl works for a software company in the country of Brada. Her job is to develop a Windows operating system. People in Brada are incredibly con