UVa 270 - Lining Up

题目:给你平面上n个点,求最多有几个点共线。

分析:计算几何。枚举基准点,其他点按基准点极角排序(斜率排序),然后枚举相邻直线判断统计即可。

说明:时间复杂度O(n*n*lg(n))。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

typedef struct pnode
{
	double x,y;
}point;
point  P[701];
double S[701];

int main()
{
	int  t;
	char buf[100];
	scanf("%d",&t);
	getchar();
	gets(buf);
	while (t --) {
		int count = 0;
		while (gets(buf) && buf[0]) {
			sscanf(buf, "%lf%lf", &P[count].x,&P[count].y);
			count ++;
		}

		int max = 0;
		for (int i = 0 ; i < count ; ++ i) {
			int save = 0;
			for (int j = 0 ; j < count ; ++ j) {
				if (j == i) continue;
				if (P[i].x == P[j].x)
					S[save ++] = 1e1000;
				else
					S[save ++] = (P[j].y-P[i].y)/(P[j].x-P[i].x);
			}
			sort(S, S+save);
			int now = 1;
			for (int j = 1 ; j < save ; ++ j)
				if (S[j] == S[j-1])
					now ++;
				else {
					if (max < now) max = now;
					now = 1;
				}
			if (max < now) max = now;
		}

		printf("%d\n",max+1);
		if (t) printf("\n");
	}
    return 0;
}
时间: 2024-10-26 18:05:26

UVa 270 - Lining Up的相关文章

uva 270 Lining Up (几何)

uva 270 Lining Up ``How am I ever going to solve this problem?" said the pilot. Indeed, the pilot was not facing an easy task. She had to drop packages at specific points scattered in a dangerous area. Furthermore, the pilot could only fly over the a

uva 270 Lining Up(暴力)

这道题目我是暴力做出来的,复杂度是n^3,因为数组做多有700组,大约可以用这个复杂度,虽然严格来说500多才 是正常的,每次都是选择两个坐标然后确定一条直线,然后遍历一下其他点,用叉积形式判一下是否在一条直线上就ok 啦,网上说可以用极角排序来解,复杂度是n^2logn然而我看了看并没有想学的欲望...以后再学吧,,,还用到了 sscanf函数,看别人这样用的,就是在一个数组里匹配想要的类型...这题比较坑的就是输入了.每两个输出之间 有空行,最后一组后面不能加空行...而且坐标输入之前有空行

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

UVA Lining Up (一条直线上最多的点数)

Description  Lining Up  ``How am I ever going to solve this problem?" said the pilot. Indeed, the pilot was not facing an easy task. She had to drop packages at specific points scattered in a dangerous area. Furthermore, the pilot could only fly over

uva live 4123 Glenbow Museum 数学递推

// uva live 4123 Glenbow Museum 数学递推 // // 题目大意: // // 对于一个边平行于坐标轴的多边形,我们可以用一个序列来描述,R和O,R表示 // 该顶点的角度为90度,O表示该定点的角度为270.给定序列的长度.问能由这些RO序 // 列组成的星型多边形(内部存在一个点可以看到所有的节点的多边形)的方法数有多少. // // 解题思路: // // 顶点数一定是序列的长度.n小于4无法组成多边形.n为奇数的时候也不行.设R的个数有 // x个,O的个数

POJ 3164Command Network &amp;&amp; UVA 11183 Teen Girl Squad 最小树形图

最小树形图:简单来说,求一个图的G0的最小树形图,先求出最短弧集合E0.若E0不存在,则图G0的最小树形图不存在.若存在且不含有向环,则E0就是T0中的所有的边.如果E0存在且含有有向环,则收缩有向环为一个点u,并形成图G1,继续且G1的最小树形图直至图Gi,若图Gi无最小树形图,则图G0也不存在最小树形图,若Gi有最小树形图Ti.则逐层展开得到T0 具体可以参考这位大牛写的过程:http://www.cnblogs.com/vongang/archive/2012/07/18/2596851.

UVA - 10733 The Colored Cubes (置换)

All 6 sides of a cube are to becoated with paint. Each side is is coated uniformly with one color. When a selectionof n different colors of paint is available, how many different cubes can youmake? Note that any two cubes are onlyto be called "differ

uva 10601 - Cubes(置换)

题目链接:uva 10601 - Cubes 题目大意:有12根等长的小木棍,然后每根木棍,输入每根木棍颜色的编号,你的任务是统计出用它们拼出多少种不同的立方体,旋转之后完全相同的立方体被认定相同. 解题思路:polya,然后对应立方体有24种旋转: 不旋转(still):1种,循环长度为12 以对顶点为轴(rot_point):4组,循环长度为3 以对面中心为轴(rot_plane):3组,分别有90,180,270度旋转,分别对应循环长度3,2,3 以对边为轴(rot_edge):6组,除了

uva 704

自己之前的不见了.. 这题是双向广搜即可过.. 1 // Colour Hash (色彩缤纷游戏) 2 // PC/UVa IDs: 110807/704, Popularity: B, Success rate: average Level: 3 3 // Verdict: Accepted 4 // Submission Date: 2011-08-28 5 // UVa Run Time: 0.048s 6 // 7 // 版权所有(C)2011,邱秋.metaphysis # yeah