刘汝佳紫书练习题4-2

来源:互联网 发布:解压软件怎么用 编辑:程序博客网 时间:2024/05/22 06:59

对每一个点去遍历以它为右上定点每种大小的正方形是否存在

#include#include#include#includeusing namespace std;const int maxn = 15;struct point{bool h, v;}map[maxn][maxn];int ans[maxn];int n;bool issq(int x, int y, int s){for(int i = 0; i < s; i++){if(!map[x + i][y].v) return 0;if(!map[x][y + i].h) return 0;if(!map[x + i][y + s].v) return 0;if(!map[x + s][y + i].h) return 0;}return 1;}void solve(){for(int i = 1; i < n; i++){for(int j = 1; j < n; j++){int mk = min(n - i, n - j);for(int k = 1; k <= mk; k++){if(issq(i, j, k)) ans[k]++;}}}}int main(){//freopen("input.txt", "r", stdin);int m, kase = 1;while(scanf("%d%d", &n, &m) != EOF){memset(map, 0, sizeof(map));memset(ans, 0, sizeof(ans));for(int i = 0; i < m; i++){char t; int x, y;cin >> t >> x >> y;//cout << t << x << y << endl;if(t == 'H') map[x][y].h = 1;if(t == 'V') map[y][x].v = 1;}solve();if(kase - 1) printf("\n**********************************\n\n");printf("Problem #%d\n\n", kase++);bool text = 0;for(int i = 1; i < n; i++){if(ans[i]) {printf("%d square (s) of size %d\n", ans[i], i);text = 1;}}if(!text) printf("No completed squares can be found.\n");}return 0;}

0 0