题目大意:

给定n个点的点集,要求向点集里添加一些点,使点集中的任意两个点满足下列三个条件中的一个:
      ①在同一行  ②在同一列
      ③以这两个点为对角构成的矩形的内部或者边缘包含其余的点
题解:

先把点按x轴排序,然后找到中间的点,做一条直线 x = a[mid].x;

然后把所有点都投影到这条直线上,这就保证了,任两个点之间至少能满足条件3(投影到轴上的点至少包含在矩形内),包含一种构造的思想。

本题必须重载运算符,光在sort中写个cmp函树是不够的,因为set是自动排序的,而你给set一个结构体他不知道该怎样排序,所以需要在结构体内重载比较运算符。

同时本题也是平面分治的一经典题

#include <bits/stdc++.h>
#include <cstring>
using namespace std;
struct node
{int x,y;bool operator <(const node &t)const{if(x==t.x)return y<t.y;else return x<t.x;}
}a[10010];
int n;
set<node>_set;
void dfs(int l,int r)
{if(l==r)return;int mid=(l+r)>>1;node tmp;for(int i=l;i<=r;++i){tmp.x=a[mid].x;tmp.y=a[i].y;_set.insert(tmp);}dfs(l,mid);dfs(mid+1,r);
}
int main()
{//freopen("input.txt","r",stdin);scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d%d",&a[i].x,&a[i].y);_set.insert(a[i]);}sort(a+1,a+1+n);dfs(1,n);printf("%d\n",_set.size());for(auto it:_set)printf("%d %d\n",it.x,it.y);return 0;
}

CodeForces - 97B Superset (思维/分治/构造)相关推荐

  1. K-Dominant Character CodeForces - 888C 思维 构造

    题意 让我们在这个字符串中找一定k长度的字串中都至少含有一个相同的字符 让求这个字串的最小长度 分析 也就是说当我们最终确定了 字串的最小长度后 每个以此长度的字串都至少含有一个相同字符 那么当我们找 ...

  2. codeforces 148 C. Terse princess(思维,构造)

    C. Terse princess(思维,构造) 题目链接:codeforces 148C 题意:     有个公主找王子,如果这个人比之前所有王子的财富都高,公主就会Oh,              ...

  3. Codeforces Round #644 1360H. Binary Median(思维、构造)

    题目描述: time limit per test 2 seconds memory limit per test 256 megabytes Consider all binary strings ...

  4. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  5. A/B Matrix CodeForces - 1360G(思维构造)

    You are given four positive integers n, m, a, b (1≤b≤n≤50; 1≤a≤m≤50). Find any such rectangular matr ...

  6. Binary String Reconstruction CodeForces - 1352F(思维+构造)

    For some binary string s (i.e. each character si is either '0' or '1'), all pairs of consecutive (ad ...

  7. CodeForces - 798D Mike and distribution(构造+思维/玄学随机数)

    题目链接:点击查看 题目大意:给出两个长度为n的数列,现在要求选出n/2+1个位置,使得两个序列中这些位置的和分别大于各自序列之和的一半 题目分析:题意换句话说,是需要让我们从数组中选出一半,要大于另 ...

  8. Crazy Diamond CodeForces - 1148C(思维构造)

    You are given a permutation pp of integers from 11 to nn, where nn is an even number. Your goal is t ...

  9. 【 CodeForces - 1060B 】Maximum Sum of Digits(思维,构造)

    题干: You are given a positive integer nn. Let S(x)S(x) be sum of digits in base 10 representation of  ...

最新文章

  1. Python中正则表达式用法 重点格式以这个为准_首看_各种问题
  2. Fiddler抓包使用教程-QuickExec
  3. python怎么在官网下载pygame_Python中pip以及Pygame的下载与安装
  4. Swift3中数组创建方法
  5. python中的引用,Python里的引用和拷贝
  6. 遥感导论网课_甘肃农业大学2019年地理信息科学专业专升本招生 专业课考试大纲...
  7. 自定义数组名做参数(传指针教学)
  8. php ctype xdigit,PHP中的ctype_xdigit()函数
  9. python调用jar包
  10. Java TreeMap排序
  11. ubuntu10.10下smbd服务配置——实现主机WinXP与虚拟机Ubuntu10.10共享
  12. 吐血推荐 ▏看完这个我才知道原来PHP应该这样学!大牛的成功是可以复制的(福利派送)
  13. 数据库分区、分表、分库,读写分离
  14. 数据库系统概论第六章(关系数据理论)知识点总结(2)—— 码的概念总结
  15. python读取word文件并替换部分文字_python批量替换
  16. 高级语言编译/解释流程
  17. android平板怎么双清,华为M2平板10.0怎么双清?华为M2进入recovery格机恢复出厂设置...
  18. sanic教程-快速开始安装
  19. 土壤水分传感器与介电常数的区别
  20. linux清垃圾软件,似Win清理工具!Ubuntu下4个应用替代品

热门文章

  1. RhinoPython圆形图案练习
  2. 【面试】--【计算机网络】
  3. “笨鸟”逆风飞:一场荣耀的高端越峰征程
  4. 折叠屏手机江湖:华为加固城墙,小米奋起直追
  5. 基于 RFID 技术的飞机维修工具管理系统
  6. vue数据双向绑定原理
  7. lockbit勒索病毒专杀工具,.lockbit勒索病毒数据恢复,lockbit勒索病毒解密处理,数据库恢复
  8. SAP EPIC_PROC增加按钮
  9. JavaScript面向对象编程BOM对象
  10. uni-app 全局消息通知弹窗(App端)