洛谷P1142 轰炸 数学

洛谷P1142 轰炸
数学

题意 给出若干个点,求解最多有几个点在同一直线上
一种做法就是枚举任意两个点,求他们的斜率然后算一下还有几个点和他们的斜率一样,
这样复杂度是 O(N^3) n<=700 讲道理是过不去的,但是数据太水,就过了
另外一种做法就是由楼上提供的,我是来提供代码的,
枚举以一个点作为原点,然后求其他点,与他的斜率,然后排序一下就行了
复杂度O(n^2logn)

 

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <string>
 7 #include <iomanip>
 8 #include <iostream>
 9 using namespace std ;
10 
11 const int maxn = 709 ;
12 const double inf = 1e9 ; 
13 struct node{
14     int x,y ; 
15 };
16 node a[701] ;
17 int n,ans,sum ; 
18 double x,y,dist[maxn] ;
19 
20 int main() 
21 {
22     scanf("%d",&n) ;
23     for(int i=1;i<=n;i++) 
24     {
25         scanf("%d%d",&a[ i ].x,&a[ i ].y) ; 
26     }
27     ans = min(2,n) ;
28     for(int i=1;i<=n;i++) 
29     {
30         
31         for(int j=1;j<=n;j++) 
32         {
33             if(i==j) 
34             {
35                 dist[ i ] = -inf-1 ; 
36                 continue ;
37             }
38             if(a[i].x==a[j].x) dist[ j ] = inf ; 
39             dist[ j ] = (double)(a[j].y-a[i].y) / (a[j].x-a[i].x) ; 
40          }
41          sort(dist+1,dist+n+1) ;
42          sum = 0 ;
43          for(int j=1;j<=n;j++) 
44              if(dist[j]!=dist[j-1])  
45              {
46                  ans = max(ans,sum+1) ;
47                  sum = 1 ; 
48              }
49              else sum++ ;
50         ans = max(ans,sum+1) ;
51     }
52     if(n==1) ans = 1 ;
53     printf("%d",ans) ;
54     
55     return 0 ;
56 }

 

转载于:https://www.cnblogs.com/third2333/p/6907249.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值