LightOJ1292->计算几何
题意:
给出平面上n个点,要求最多有多少个点能共线。
题解:
使用map存储每个点相对于原点的不同斜率上对应的点的个数,最后输出最大值即可。
代码:
#include <stdio.h>
#include <iostream>
#include <map>
using namespace std ;
int GCD(int a , int b) {return b?GCD(b,a%b):a;}
int N ;
struct node
{
int x , y ;
}num[710];
map<pair<int,int>,int>Map ;
int main()
{
int T ;
scanf("%d" , &T) ;
for(int cas = 1 ; cas <= T ; cas ++)
{
scanf("%d" , &N) ;
for(int i = 1 ; i <= N ; i ++)
{
scanf("%d%d" , &num[i].x , &num[i].y) ;
}
int ans = 0 ;
for(int i = 1 ; i <= N ; i ++)
{
Map.clear();
for(int j = 1 ; j <= N ; j ++)
{
if(i == j) continue ;
int dx = num[i].x - num[j].x ;
int dy = num[i].y - num[j].y ;
if(dx < 0){dx = -dx ; dy = -dy ;}
int G = GCD(dx , dy) ;
dx/=G ; dy/=G;
Map[make_pair(dx , dy)]++ ;
ans = max(Map[make_pair(dx,dy)],ans) ;
}
}
printf("Case %d: %d\n" , cas , ans+1);
}
return 0 ;
}

本文介绍了解决LightOJ1292题目的一种方法,该题目要求找出平面上最多有多少个点可以共线。通过使用map来记录不同斜率上的点的数量,并最终输出最大值。

5729

被折叠的 条评论
为什么被折叠?



