【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; j<m; ++j) {
16             if (map[i][j] == c) {
17                 if (i<x1)   x1 = i;
18                 if (j<y1)   y1 = j;
19                 if (i>x2)   x2 = i;
20                 if (j>y2)   y2 = j;
21             }
22         }
23     }
24     if (x2-x1<2 || y2-y1<2)
25         return false;
26     for (i=x1; i<=x2; ++i)
27         if (map[i][y1]!=c || map[i][y2]!=c)
28             return false;
29     for (j=y1; j<=y2; ++j)
30         if (map[x1][j]!=c || map[x2][j]!=c)
31             return false;
32     for (i=x1+1; i<x2; ++i)
33         for (j=y1+1; j<y2; ++j)
34             if (map[i][j] != '.')
35                 return false;
36     return true;
37 }
38 
39 int main() {
40     int i;
41     int j;
42 
43     while (scanf("%d %d", &n, &m)!=EOF && (n||m)) {
44         memset(visit, false, sizeof(visit));
45         for (i=0; i<n; ++i) {
46             scanf("%s", map[i]);
47             for (j=0; j<m; ++j) {
48                 if (map[i][j] != '.') {
49                     visit[map[i][j]-'A'] = true;
50                 }
51             }
52         }
53         for (i=0; i<26; ++i) {
54             if (visit[i] && check(i+'A'))
55                 printf("%c", i+'A');
56         }
57         printf("
");
58     }
59 
60     return 0;
61 }
原文地址:https://www.cnblogs.com/bombe1013/p/3905875.html