zoukankan      html  css  js  c++  java
  • POJ 3174 Alignment of the Planets (暴力求解)

    题意:给定 n 个坐标,问你三个共线的有多少组。

    析:这个题真是坑啊,写着 n <= 770,那么一秒时间,三个循环肯定超时啊,我一直不敢写了,换了好几种方法都WA了,也不知道为什么,在比赛时坑我了两个多小时,

    最后看到那么多过的,就想试试,真的AC ,三个循环一点没优化,竟然才150多毫秒,。。。。POJ的数据真是水啊。

    没什么好说的,只要三个循环,然后判断斜率就好了。

    代码如下:

    #include <cstdio>
    #include <string>
    #include <cstdlib>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <set>
    #include <queue>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <map>
    using namespace std ;
    typedef long long LL;
    typedef pair<int, int> P;
    const int INF = 0x3f3f3f3f;
    const double inf = 0x3f3f3f3f3f3f3f;
    const double eps = 1e-11;
    const int maxn = 770 + 5;
    struct Node{
        int id1, id2, id3;
        Node(int a, int b, int c) : id1(a), id2(b), id3(c) { }
        bool operator < (const Node &p) const{
            if(id1 != p.id1)  return id1 < p.id1;
            else if(id2 != p.id2)  return id2 < p.id2;
            else return id3 < p.id3;
        }
    };
    struct node{
        int id, x, y;
    };
    struct node1{
        int id;
        double rad;
        bool operator < (const node1 &p) const{
            return rad < p.rad || (p.rad == rad && id < p.id);
        }
    };
    
    double Fabs(double x){
        return x < 0.0 ? -x : x;
    }
    
    vector<Node> ans;
    node a[maxn];
    
    int main(){
        int n, x, y, c;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i){
            scanf("%d %d", &x, &y);
            a[i].id = i+1;
            a[i].x = x+1;
            a[i].y = y+1;
        }
    
        for(int i = 0; i < n; ++i){
            for(int j = i+1; j < n; ++j){
                for(int k = j+1; k < n; ++k){
                    if((a[i].y-a[j].y)*(a[i].x-a[k].x) == (a[i].y-a[k].y)*(a[i].x-a[j].x)){
                        ans.push_back(Node(a[i].id, a[j].id, a[k].id));
                    }
                }
            }
        }
    
    //    sort(ans.begin(), ans.end());
        printf("%d
    ", ans.size());
        for(int i = 0; i < ans.size(); ++i)
            printf("%d %d %d
    ", ans[i].id1, ans[i].id2, ans[i].id3);
        return 0;
    }
    
    
    /*
    6
    1 2
    1 3
    1 4
    1 5
    1 6
    1 1
    */
    
  • 相关阅读:
    推荐一款快得令地发指本地搜索软件:Everything,绝对改变对NTFS的看法
    “/”应用程序中的服务器错误 WebParts开发时出现的错误
    《让人无法说 NO的攻心说话术》摘要
    UXWEEK
    2012中国交互设计体验日演讲实录
    彩色铅笔入门
    ClickOnce证书签名
    DevExpress控件使用小结
    解决ClickOnce签名过期问题
    属于自己的小小空间
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5715806.html
Copyright © 2011-2022 走看看