zoukankan      html  css  js  c++  java
  • A

    /*

    分治法,第一次做不是很懂,借鉴了神犇代码,但实操之后感觉像二分,,可能做得少了或者就是。。。。

    */

    题目大意:

    一个集合里有若干点,要求你添加某些点后保证这个集合里的任意两点满足以下三个条件中至少一个:

    1.在一个水平线上 2.在一个竖直线上 3.两点组成的矩形之间有点.

    解题思路:

    神犇所讲,将点排序,在中间点处建一条竖直线,令其余点在其上投影,二分。

    ps:不是很明白错误是什么,,结构体里重载<运算符可以,但是写个cmp函数就报错,不是很懂,贴上错误代码,如果神犇们知道什么错误,请评论告知,多谢;

    错误代码

    #include<iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <stack>
    #include <set>
    #include <cstdio>
    #include <iterator>
    #include <sstream>
    #include <cmath>
    #include <deque>
    using namespace std;
    
    struct node
    {
        int x;
        int y;
    //    bool operator <(const node b)const
    //    {
    //        if(x==b.x) return y<b.y;
    //        else return x<b.x;
    //    }
    };
    int n;
    node p1[10050];
    set<node > p;
    bool cmp(const node a,const node b)
    {
        return a.x<b.x;
    }
    void dfs(int l,int h)
    {
        if (l==h) return ;
        int mid;
        mid=(l+h)/2;
        for (int i=l; i<=h; i++)
        {
            node c;
            c.x=p1[mid].x;
            c.y=p1[i].y;
            p.insert(c);
        }
        dfs(l,mid);
        dfs(mid+1,h);
    }
    int main()
    {
        cin>>n;
        for (int i=0; i<n; i++)
        {
            cin>>p1[i].x>>p1[i].y;
            p.insert(p1[i]);
        }
        sort(p1,p1+n,cmp);
        dfs(0,n-1);
        cout<<p.size()<<endl;
        set<node >::iterator it;
        for (it=p.begin(); it!=p.end(); it++)
        {
            cout<<(*it).x<<" "<<(*it).y<<endl;
        }
    }
    View Code

    AC代码:

    #include<iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <stack>
    #include <set>
    #include <cstdio>
    #include <iterator>
    #include <sstream>
    #include <cmath>
    #include <deque>
    using namespace std;
    
    struct node
    {
        int x;
        int y;
        bool operator <(const node b)const
        {
            if(x==b.x) return y<b.y;
            else return x<b.x;
        }
    };
    int n;
    node p1[10050];
    set<node > p;
    bool cmp(const node a,const node b)
    {
        return a.x<b.x;
    }
    void dfs(int l,int h)
    {
        if (l==h) return ;
        int mid;
        mid=(l+h)/2;
        for (int i=l; i<=h; i++)
        {
            node c;
            c.x=p1[mid].x;
            c.y=p1[i].y;
            p.insert(c);
        }
        dfs(l,mid);
        dfs(mid+1,h);
    }
    int main()
    {
        cin>>n;
        for (int i=0; i<n; i++)
        {
            cin>>p1[i].x>>p1[i].y;
            p.insert(p1[i]);
        }
        sort(p1,p1+n);
        dfs(0,n-1);
        cout<<p.size()<<endl;
        set<node >::iterator it;
        for (it=p.begin(); it!=p.end(); it++)
        {
            cout<<(*it).x<<" "<<(*it).y<<endl;
        }
    }
    View Code
  • 相关阅读:
    faster-RCNN框架之rpn 较小目标检测,如果只使用rpn,并减少多个候选框
    git clone Failed to connect to 127.0.0.1 port 43213: Connection refused
    chrome不能浏览任何网页,提示配置proxy,Ubuntu
    Ubuntu16下用virtualbox 安装Windows虚拟机
    mobilenet之Depthwise +Pointwise
    联想电脑t450,t460p,t470等安装好ubuntu后启动找不到系统
    tensorflow-serving-gpu 本地编译并使用
    git克隆远程仓库的时候断电了,使用git-fetch断点续传
    java ->Servlet接口
    java ->Tomcat服务器
  • 原文地址:https://www.cnblogs.com/SunQi-lvbu/p/6817464.html
Copyright © 2011-2022 走看看