/*

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

*/

题目大意:

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

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[];
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)/;
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+,h);
}
int main()
{
cin>>n;
for (int i=; i<n; i++)
{
cin>>p1[i].x>>p1[i].y;
p.insert(p1[i]);
}
sort(p1,p1+n,cmp);
dfs(,n-);
cout<<p.size()<<endl;
set<node >::iterator it;
for (it=p.begin(); it!=p.end(); it++)
{
cout<<(*it).x<<" "<<(*it).y<<endl;
}
}

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[];
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)/;
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+,h);
}
int main()
{
cin>>n;
for (int i=; i<n; i++)
{
cin>>p1[i].x>>p1[i].y;
p.insert(p1[i]);
}
sort(p1,p1+n);
dfs(,n-);
cout<<p.size()<<endl;
set<node >::iterator it;
for (it=p.begin(); it!=p.end(); it++)
{
cout<<(*it).x<<" "<<(*it).y<<endl;
}
}

A - Superset CodeForces - 97B(人生第一个分治法,感觉,像二分啊。。)的更多相关文章

  1. Codeforces 448C Painting Fence(分治法)

    题目链接:http://codeforces.com/contest/448/problem/C 题目大意:n个1* a [ i ] 的木板,把他们立起来,变成每个木板宽为1长为 a [ i ] 的栅 ...

  2. 分治法(一)(zt)

    这篇文章将讨论: 1) 分治策略的思想和理论 2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性. 说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它 ...

  3. C语言实现快速排序法(分治法)

    title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true --- 算法原理 分治法的基本思 ...

  4. p1257 平面上最接近点对---(分治法)

    首先就是一维最接近点的情况... #include<iostream> #include<cstdio> #include<cstring> #include< ...

  5. 分治法——快速排序(quicksort)

    先上代码 #include <iostream> using namespace std; int partition(int a[],int low, int high) { int p ...

  6. python 实现分治法的几个例子

    分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质. 3) 利用该问题分解出的子 ...

  7. Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

    1.问题描写叙述 写一个高效的算法.从一个m×n的整数矩阵中查找出给定的值,矩阵具有例如以下特点: 每一行从左到右递增. 每一列从上到下递增. 2. 方法与思路 2.1 二分查找法 依据矩阵的特征非常 ...

  8. 分治法及其python实现例子

    在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

  9. Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分

    D. Professor GukiZ and Two Arrays 题目连接: http://www.codeforces.com/contest/620/problem/D Description ...

随机推荐

  1. 已经菜到不行了 PAT 1010. Radix (25)

    https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...

  2. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  3. Jenkins + jmeter + ant + git 自动化集成

     背景: 目前测试组项目多,手头任务紧,且回归测试任务量较大,经过组内讨论采用相对快速高效的方式(自动化接口测试类型),在迭代任务中把主要精力集中在新需求测试:而回归测试时,主要采用自动化测试,提高测 ...

  4. Table of Contents - Python 2.x

    异常 异常类的继承关系 日志 标准日志模块 Hello World Logging Configuration

  5. RabbitMQ问题解决:TCP connection succeeded but Erlang distribution failed

    说明 本来是要先把Hystrix 仪表盘更完的,但是出现了Turbine.Dashboard.RabbitMQ整合实现监控. 所以先在学RabbitMq的基本操作,在安装过程中出现了 E:\Rabbi ...

  6. Enumeration和Iterator

    首先,Enumeration已经被Iterator取代了..... Enumeration是个接口,不是类,使用时需要具体的实现类. 里面只定义了两个方法: hasMoreElements()和nex ...

  7. javascript 写了个字符串组合的情况

    function log() { var i = 0, str = '', args = [].slice.call(arguments); j++; if (isRepeat(args)) { k+ ...

  8. 【leetcode 简单】 第六十六题 用栈实现队列

    使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. ...

  9. Anaconda3+python3环境下如何创建python2环境(win+Linux下适用,同一个anaconda下py2/3共存)

    本人之前已经在anaconda环境下已经安装了python3的环境,现在因为一些需求,要安装python2环境 1.打开anaconda的anaconda prompt查看当前环境: conda in ...

  10. Treats for the Cows 区间DP POJ 3186

    题目来源:http://poj.org/problem?id=3186 (http://www.fjutacm.com/Problem.jsp?pid=1389) /** 题目意思: 约翰经常给产奶量 ...