Uva 201 Squres

// 一个正方形类
struct Squere
{
	vector <vector< vector<char >>> image; // 存储一个图形
	int node; // 为n*n 的图形
// 初始化
	Squere(int n) {
		node = n;
		vector<vector<char>> t(n, { '.','.' });
		for (int i = 0; i < n; i++) { image.push_back(t); }
	}
// 对每一种边长遍历
	map<int,int> getAns()
	{
		map<int, int>ans;
		for (int i = 1; i < node; i++) {
			for (int j = 0; j < node; j++)
				for (int k = 0; k < node; k++) {
					bool is = isSqures(i, j, k,node);
					if (is && ans.find(i) == ans.end()) ans[i] = 1;
					else if (is) ans[i]++;
				}
		}
		return ans;
	}
// 判断是否能构成正方形
	bool isSqures(int length, int x, int y, int n)
	{
		if (x + length >= n || y + length >= n) return 0;
		for (int i = x; i < x + length; i++) if (image[i][y][0] != 'v' || image[i][y + length][0] != 'v') return 0;
		for (int i = y; i < y + length; i++) if (image[x][i][1] != 'h' || image[x + length][i][1] != 'h')return 0;
		return 1;
	}
};

int main()
{
	// freopen("my_ans.txt", "w", stdout);
	int n, m; int promblem = 0;
	while (cin >> n) {
		cin >> m;
		if (promblem) cout << "\n**********************************\n\n";
		cout << "Problem #" << ++promblem << "\n\n";
		Squere s(n);
		for (int i = 0; i < m; i++) {
			char type; int x, y; cin >> type >> x >> y;
			switch (type)
			{
			case 'H':s.image[x - 1][y - 1][1] = 'h'; break;
			case 'V':s.image[y - 1][x - 1][0] = 'v';
			}
		}
		map<int, int>ans = s.getAns();
		if (ans.empty()) cout << "No completed squares can be found." << endl;
		else {
			map<int, int>::iterator it = ans.begin();
			while (it != ans.end()) { cout <<  it->second << " square (s) of size " << it->first << endl; it++; }
		}
	}
	return 0;
}

这个代码简单,但细节真的好多

和OJ上的数据跑了N组老有格式错误,打代码时间可能还没有改格式时间长....

记录一下代码过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值