• UVa 270 & POJ 1118


      题目大意:给一些点,找出一条直线使尽可能多的点在这条直线上,求这条直线上点的个数。

      以每一个点为原点进行枚举,求其它点的斜率,斜率相同则说明在一条直线上。对斜率排序,找出斜率连续相等的最大长度。

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <algorithm>
     4 using namespace std;
     5 #define MAXN 700+10
     6 #define PRECISION 10e-9
     7 
     8 struct Point
     9 {
    10     int x, y;
    11 };
    12 
    13 Point point[MAXN];
    14 double slope[MAXN];
    15 
    16 int main()
    17 {
    18 #ifdef LOCAL
    19     freopen("in", "r", stdin);
    20 #endif
    21     int N;
    22     scanf("%d", &N);
    23     char s[100];
    24     getchar();
    25     gets(s);
    26     while (N--)
    27     {
    28         int n = 0; // the number of points
    29         while (gets(s))
    30         {
    31             if (s[0] == '')   break;
    32             sscanf(s, "%d%d", &point[n].x, &point[n].y);
    33             n++;
    34         }
    35         int ans = 0;
    36         for (int i = 0; i < n; i++)
    37         {
    38             int zero_cnt = 0, k = 0;
    39             for (int j = 0; j < n; j++)
    40                 if (i != j)
    41                 {
    42                     if (point[i].x == point[j].x)   zero_cnt++;
    43                     else
    44                     {
    45                         slope[k] = 1.0 * (point[j].y - point[i].y) / (point[j].x - point[i].x);
    46                         k++;
    47                     }
    48                 }
    49             sort(slope, slope+k);
    50             int same_cnt = 1, maxl = 1;
    51             for (int i = 1; i <= k; i++)
    52             {
    53                 if (i < k && fabs(slope[i] - slope[i-1]) < PRECISION)
    54                 {
    55                     same_cnt++;
    56                 }
    57                 else 
    58                 {
    59                     maxl = max(maxl, same_cnt);
    60                     same_cnt = 1;
    61                 }
    62             }
    63             maxl = max(maxl, zero_cnt);
    64             ans = max(ans, maxl+1);
    65         }
    66         printf("%d
    ", ans);
    67         if (N) printf("
    ");
    68     }
    69     return 0;
    70 }
    View Code

      开始WA了两次,各种纠结,也找不出什么问题,忽然想到会不会是精度设的太大了,从10e-6改成10e-9,然后抱着侥幸心理提交了,竟然AC了...这个...算是积累经验吧

  • 相关阅读:
    FFF NOJ 2073 裸KM算法
    FFF NOJ 2073 裸KM算法
    FFF NOJ 2073 裸KM算法
    【HDOJ】3242 List Operations
    【HDOJ】2319 Card Trick
    【HDOJ】1760 A New Tetris Game
    【HDOJ】1525 Euclid's Game
    【HDOJ】2217 Visit
    【HDOJ】2144 Evolution
    【HDOJ】1987 Decoding
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3205088.html
Copyright © 2020-2023  润新知