zoukankan      html  css  js  c++  java
  • uva 270 Lining Up

    继续复习

    暴力

    给出n个点的坐标,选出最多的点,在一条直线上

    直接暴力,不过时间比较糟糕。一个二重循环,枚举i,j两个点,这两点确定一条直线,然后枚举剩下的点看是否在这条直线上,所以一个三重循环,时间复杂度O(n^3)

    注意枚举不要做重复的工作,否则会超时

    另外这题是有O(n^2logn)的算法的

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define N 710
    #define LEN 110
    
    int n;
    struct point
    {
       int x,y;
    }p[N];
    typedef struct point point;
    
    int line(int i ,int j ,int k)
    {
       return (p[j].y-p[i].y)*(p[k].x-p[i].x) - (p[j].x-p[i].x)*(p[k].y-p[i].y);
    }
    
    void solve()
    {
       int max = 2;
       for(int i=0; i<n; i++)
          for(int j=i+1; j<n; j++) //枚举两点
          {
             int res = 2;
             for(int k=j+1; k<n; k++)
                if(k!=i && k!=j)
                {
                   if(!line(i,j,k))
                      res++;
                }
             if(res > max) max = res;
          }
       printf("%d\n",max);
    }
    
    int main()
    {
       int T;
       scanf("%d",&T);
       getchar(); getchar();
       while(T--)
       {
          char str[LEN];
          n = 0;
          while(1)
          {
             if(!gets(str))      break;
             if(!strcmp(str,"")) break;
             sscanf(str,"%d%d",&p[n].x , &p[n].y);
             n++;
          }
          solve();
          if(T) printf("\n");
       }
       return 0;
    }
  • 相关阅读:
    数据库索引的作用和长处缺点
    Spring的依赖注入
    Spring+Ibatis集成开发实例
    IOS开发之类和对象
    关于C++ const 的全面总结
    包管理器Bower使用手冊之中的一个
    项目总算完工了
    git reset and git checkout
    unity3D中协程和线程混合
    【剑指offer】左旋转字符串
  • 原文地址:https://www.cnblogs.com/scau20110726/p/3043267.html
Copyright © 2011-2022 走看看