UVA201 正方形 Squares

思路是很简单就是暴力就行了,但是中间需要简化代码还稍微想一下,就躺平了,中间直接写了4个for循环,然后就是输入有个坑,那就是前面输入的字符不一样的时候,后面两个不是按照行列的顺序固定的,这个是看了原题才知道的

#include <bits/stdc++.h>

#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;

int main() {
    int n;
    int num = 1;
    while (cin >> n) {
        if (num > 1) printf("\n**********************************\n\n");
        printf("Problem #%d\n\n", num++);
        int m;
        cin >> m;
        int r[15][15] = {};
        int c[15][15] = {};
        while (m--) {
            string s;
            int x, y;
            cin >> s >> x >> y;
            if (s == "H") c[x][y] = 1;
            else r[y][x] = 1;
        }
        int ook = 0;
        for (int len = 1; len <= n - 1; len++) {
            int ans = 0;
            for (int i = 1; i <= n - len; i++) {
                for (int j = 1; j <= n - len; j++) {
                    int ok = 1;
                    int x = i, y = j;
                    for (int k = 0; k < len; k++) {
                        if (!r[x][y]) ok = 0;
                        x++;
                    }
                    for (int k = 0; k < len; k++) {
                        if (!c[x][y]) ok = 0;
                        y++;
                    }
                    x = i; y = j;
                    for (int k = 0; k < len; k++) {
                        if (!c[x][y]) ok = 0;
                        y++;
                    }
                    for (int k = 0; k < len; k++) {
                        if (!r[x][y]) ok = 0;
                        x++;
                    }
                    if (ok) ans++;
                }
            }
            if (ans) { printf("%d square (s) of size %d\n", ans, len); ook = 1; }
        }
        if (!ook) printf("No completed squares can be found.\n");
    }
    return 0;
}

版权声明:本文为qq_33942309原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。