首页 > 代码库 > uva 201 Squares 暴力
uva 201 Squares 暴力
暴力
把边的信息装到一个field数组里面
第一维存水平线 第二维存竖直线
多重循环
先从边长为1正方形开始检查
每次检查都重新扫一下它的外圈
注意竖直线的地方它先给列坐标再给行坐标
输出有些繁琐
注意输出空行还有星星
#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#include <cmath>#include <set>#include <queue>#include <stack>#include <map>#include <vector>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int, int> P;const int maxn = 1100;int field[2][10][10];int cnt[10];int main(){ //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n, m; int kase = 0; while(scanf("%d%d", &n, &m) == 2) { memset(field, 0, sizeof(field)); memset(cnt, 0, sizeof(cnt)); ++kase; if(kase > 1) printf("\n**********************************\n\n"); char buf[10]; int x, y; for(int i = 0; i < m; i++) { scanf("%s%d%d", buf, &x, &y); if(buf[0] == ‘H‘) field[0][x][y] = 1; else if(buf[0] == ‘V‘) field[1][y][x] = 1; } for(int s = 1; s < n; s++) { for(int i = 1; i <= n - s; i++) { for(int j = 1; j <= n - s; j++) { bool judge = true; for(int t = 0; t < s && judge; t++) if(field[0][i][j+t] != 1) judge = false; for(int t = 0; t < s && judge; t++) if(field[0][i+s][j+t] != 1) judge = false; for(int t = 0; t < s && judge; t++) if(field[1][i+t][j] != 1) judge = false; for(int t = 0; t < s && judge; t++) if(field[1][i+t][j+s] != 1) judge = false; if(judge) cnt[s]++; } } } int flag = false; printf("Problem #%d\n\n", kase); for(int i = 1; i <= 9; i++) { if(cnt[i] > 0) { flag = true; printf("%d square (s) of size %d\n", cnt[i], i); } } if(!flag) printf("No completed squares can be found.\n"); } return 0;}
uva 201 Squares 暴力
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。