1.题目描述:点击打开链接
2.解题思路:把输入的每个点作为矩形左上角,顺时针走一圈,看能否围成一个边长为len的正方形
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> #include<stdlib.h> #define max 200 int n, m; int arr[max][3]; int find(int len, int a, int x, int y) { if (a == 'V') return 0; int aa = 1, bb = 1, cc = 1, dd = 1; int k; for (int i = y; i < y + len; i++) { for (k = 0; k < m; k++) if (arr[k][0] == 'H'&&arr[k][1] == x&&arr[k][2] == i) break; if (k == m) aa = 0; } for (int i = y; i < y + len; i++) { for (k = 0; k < m; k++) if (arr[k][0] == 'H'&&arr[k][1] == x + len&&arr[k][2] == i) break; if (k == m) bb = 0; } for (int i = x; i < x + len; i++) { for (k = 0; k < m; k++) if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y) break; if (k == m) cc = 0; } for (int i = x; i < x + len; i++) { for (k = 0; k < m; k++) if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y + len) break; if (k == m)dd = 0; } if (aa&&bb&&cc&&dd) return 1; return 0; } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int rnd = 0; while (scanf("%d%d", &n, &m) == 2) { for (int i = 0; i < m; i++) scanf("%s%d%d", &arr[i][0], &arr[i][1], &arr[i][2]); if (rnd) printf("\n**********************************\n\n"); printf("Problem #%d\n\n", ++rnd); int flag = 0; for (int i = 1; i < n; i++) { int count = 0; for (int j = 0; j < m; j++) { if (find(i, arr[j][0], arr[j][1], arr[j][2])) { flag = 1; count++; } } if (count) printf("%d square (s) of size %d\n", count, i); } if (!flag) printf("No completed squares can be found.\n"); } return 0; }