poj-1314 Finding Rectangles

题目地址: http://poj.org/problem?id=1314

题意: 给出一串的点,有些点可以构成正方形,请按照字符排序输出。

因为这道题的用处很大, 最近接触的cv 中的Rectangle Detection 中就有方法使用到了这个算法。 但实际中使用的算法还是暴力。

不过因为数据点较少,可以直接快排之后,再来个迭代,就得到答案了

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 30; 

struct Node{
	string label;
	int x,y;
}nd[maxn]; 

int n; 

int cmp(const void *a, const void *b){
	Node* aa = (Node *)a;
	Node* bb = (Node *)b;
	if(aa->x == bb->x){
		return aa->y - bb->y;
	}else{
		return aa->x - bb->x;
	}
}

int main(){
	freopen("in.txt", "r", stdin); 

	int i,j,k, l, cnt = 1;
	char word[4];
	while( cin>>n && n!=0){
		for(i=0; i<n; i++){
			cin>>nd[i].label>>nd[i].x>>nd[i].y;
		}
		qsort(nd, n, sizeof(nd[0]), cmp);
		vector<string> vt;
		for(i=0; i<n; i++){
			for(j=i+1; j<n && nd[j].x == nd[i].x; j++){
				for(k=j+1; k<n; k++){
					if(nd[k].y == nd[i].y){
						for(l=k+1; l<n && nd[l].x == nd[k].x; l++){
							if(nd[l].y == nd[j].y){
								string tmp = "";
								tmp += nd[j].label;  tmp += nd[l].label;
								tmp += nd[k].label;  tmp += nd[i].label;
								vt.push_back(tmp);
							}
						}
					}
				}
			}
		}
		if(vt.size() == 0){
			printf("Point set %d: No rectangles\n", cnt++);
		}else{
			printf("Point set %d:\n", cnt++);
			sort(vt.begin(), vt.end());
			for(i=0; i<vt.size(); i++){
				if((i+1)%10 == 0){
					cout<<" "<<vt[i]<<endl;
				}else{
					cout<<" "<<vt[i];
				}
			}
			if(i%10 != 0){
				printf("\n");
			}
		}
	}
	return 0;
}

  

时间: 2024-10-14 19:02:11

poj-1314 Finding Rectangles的相关文章

POJ 2049 Finding Nemo 优先队列 STL

题目链接:http://poj.org/problem?id=2049 题目利用了<海底总动员>的情节,小丑鱼尼莫迷路了,他老爸去营救他便是题意. 题目给出了这样的地图,说是假设地图由墙和门组成,忽略墙的厚度,地图上有门,没有墙的地方是可以自由行动的问可以经过最少多少道门便可以营救到尼莫. 这个题给的数据是墙的交点为整数点,但鱼爸爸实在非墙的地方自由移动. 因此,这个题有两个难点: 1.如果建图保存地图 2.如何在地图上遍历 由于题目是给出一个点(x,y),来表示一段墙 我便用一对X,Y来表示

POJ 2049— Finding Nemo(三维BFS)10/200

海底总动员.... 这个题开始不会建图,彻底颠覆以前我对广搜题的想法.想了好久, 忽然想到省赛时HYPO让我做三维BFS来着,一直没做,看到POJ计划这个题,就是三维BFS解题,就做了一下, 对于这个题....实在不知道说什么好,又坑.又SB,POJ的后台数据和题目描述的完全不一样,看了DIscuss之后开始 改动代码,最后改的又臭又长,搜了无数题解找数据,卡了整整两天. 挥挥洒洒 160行....同时也是我第一次使用  三维建图+BFS,纪念一下! 2049 算是我攻克POJ计划的第一个卡两天

POJ 2049 Finding Nemo BFS

题目大意:给你一个奇奇怪怪的迷宫, 这个迷宫包括墙和门.再给你一个起始坐标, 问你从迷宫内到外面至少要穿越多少的门. 题目分析: 穿越多少门等同于路过了多少个格子. 为此我们可以将整个地图中的格子,门,墙,墙的交界处(格子的顶点)全部抽象成点. 即坐标(奇数,奇数)为格子的坐标,坐标(奇数,偶数)或坐标(偶数,奇数)为门或墙的坐标,坐标(偶数,偶数)为格子的顶点. 这样题目就转化成了从起始点所在的格子走到迷宫外的格子最少要经过多少个格子,用step[i][j]表示走出迷宫后遇到的第一个格子的坐标

poj 3376 Finding Palindromes

Finding Palindromes http://poj.org/problem?id=3376 Time Limit: 10000MS   Memory Limit: 262144K       Case Time Limit: 2000MS Description A word is called a palindrome if we read from right to left is as same as we read from left to right. For example

POJ 2049 Finding Nemo

Finding Nemo Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 8631   Accepted: 2019 Description Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, he became lost and couldn't find his way home. Therefo

POJ 3175 Finding Bovine Roots(思路)

题目地址:http://poj.org/problem?id=3175 思路: 若x.123....这个数字的平方是一个整数的话,那必然,sqr(x.124)>ceil(sqr(x.123))[ceil向上取整].所以,可以从小到大枚举它的整数部分x,遇到的第一个满足结果的x,即为答案. #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<a

poj 3681 Finding the Rectangle 尺取法解最小矩形覆盖问题

题意: 平面上有n个点,现在要求一个面积最小的矩形能完全覆盖其中的m个点(边界不算). 分析: 求满足某个性质的最小区间的问题尺取法比二分还要高效,这题可以在x上暴力枚举,在y上用尺取法(在x,y上都用尺取法是不对的). 代码: //poj 3681 //sep9 #include <iostream> #include <algorithm> using namespace std; int n,m,ans; struct P { int x,y; }pnt1[256],pnt2

[转] POJ字符串分类

POJ 1002 - 487-3279(基础)http://acm.pku.edu.cn/JudgeOnline/problem?id=1002题意:略解法:二叉查找数,map,快排... POJ 1200 - Crazy Search(基础)http://acm.pku.edu.cn/JudgeOnline/problem?id=1200题意:找出不相同的子串数量,字母表大小和子串长度会给定,这题很推荐hash入门者一做解法:hash(建议karp-rabin) POJ 1204 - Word

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************