思路是很简单就是暴力就行了,但是中间需要简化代码还稍微想一下,就躺平了,中间直接写了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版权协议,转载请附上原文出处链接和本声明。