http://codeforces.com/problemset/problem/97/B

题目大意:给n个点,添加一些点,使得任意两个点:

1.在同一条线上

2.以它们为顶点构成的矩形上有其他点。

输出一组可行解。

——————————————————

我发现我根本不会做英语题……看了半天题面后就去找题解了。

http://blog.csdn.net/wust_zjx/article/details/44900093

这是其他人的题解,但我总觉得这个人说的不明不白的(自行理解半个小时才明白的我深有感触)

首先题告诉我们随意一组解都可以,这给我们很大的自由空间,直接开始想暴力。

……但是我们不可以把点填满(题中有最大点数限制)

我们通过二分平面,对于mid点,每个在l-r中的其他的点与该点所在直线的投影就是我们需要添加的点(显然)。

同时为了防止我们添加重复的点我们需要用set维护一下。

Q1:为什么我们只需要在区间中的点的投影?

A1:我们知道在大区间内我们已经把所有的点投影到了mid,那么我们画图后发现我们对于右边的区间和左边的区间中的点一定满足上面的两种条件,故不需要加点。

Q2:为什么可行?

A2:(数都是约数)第一次我们添加了n个点,第二次我们添加了n/2*2个点,第三次我们添加了n/4*4个点……我们添加logn次,我们总共添加了nlogn个点大约1.2*10^5,总共也就大约1.3*10^5个点,一定超不了。

#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<set>
#include<algorithm>
#define x first
#define y second
using namespace std;
typedef pair<int,int>ii;
inline int read(){
int X=,w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
ii p[];
set<ii>s;
void solve(int l,int r){
if(l>=r)return;
int mid=(l+r)>>;
for(int i=l;i<=r;i++){
s.insert(ii(p[mid].x,p[i].y));
}
solve(l,mid);
solve(mid+,r);
return;
}
int main(){
int n=read();
for(int i=;i<=n;i++){
p[i].x=read();
p[i].y=read();
s.insert(p[i]);
}
sort(p+,p+n+);
solve(,n);
printf("%d\n",(int)s.size());
for(set<ii>::iterator i=s.begin();i!=s.end();i++){
printf("%d %d\n",i->x,i->y);
}
return ;
}

CF97B:Superset——题解的更多相关文章

  1. CF97B Superset超级集合

    CF97B Superset 这题主要是构造难想.看看数据范围发现连\(O(n^2)\)都被卡了,然后 考试的名称提醒我 想到了分治. 坐标按横坐标为关键字排序后找中间的点进行分治不是点分治qwq. ...

  2. CF97B Superset

    嘟嘟嘟cf 嘟嘟嘟luogu 刚开始我看成了对于一个点\(i\),存在一个点\(j\)满足三个条件之一,而不是任意的\(j\).结果自然\(gg\)了,第二个点就\(WA\)了. 也不知怎么来的思路: ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. CentOS 5/6上安装EPEL源

    转自:http://www.vckai.com/p/25 EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fe ...

  2. hive 更改列的位置时遇到的问题

    hive > desc formatted tb_fq; OK col_name data_type comment # col_name data_type comment name stri ...

  3. package.json中的devDependencies和dependencies有啥区别?

    如果你的项目是发布到npm的一个包, 那么这个包的package.json中的dependencies中的依赖是会被下载下来到这个包的node_modules文件夹中的(如果你的项目本身没有这个依赖) ...

  4. 如何编写 Python 程序

    如何编写 Python 程序 从今以后,保存和运行 Python 程序的标准步骤如下: 对于 PyCharm 用户 打开 PyCharm. 以给定的文件名创建新文件. 输入案例中给出的代码. 右键并运 ...

  5. 接口文档神器--apiui的使用

    接口开发,最麻烦的就是写文档了,曾经我也因为写接口文档苦不堪言:自从使用了apiui接口文档神器,工作效率和文档清晰得到了不止一个档次的提升. 下面介绍一下这个神器的使用: 把文件下载下来,放在网站根 ...

  6. TW实习日记:第18天

    今天的bug没有那么多了,都是些小bug,一下就改好了.或者是接口那边数据返回的有问题,通知一下同事就ok了.主要今天是在赶功能进度,然而有一个功能模块需求里并没有写,实在是不知道要做成什么样子,真的 ...

  7. matlab画图:设置y轴位置,使y轴在x轴的中间

    sigmoid函数图像 x=-10:0.1:10;  y=sigmf(x,[1 0]);  plot(x,y) 画出的图像如下所示: 怎么将Y轴放在中间呢,而不是在左边? 即如何得到这种效果呢? 方法 ...

  8. Image控件显示以byte[]字节数组形式存在的图片

    工作中遇到了这样的一个问题.起初觉得很简单,获得了图片的byte[]后,可以将其转换成内存中的图片对象(如System.Drawing.Image),而后赋给页面的Image控件.尝试后才发现这样根本 ...

  9. oracle常用函数总结

    Oracle常用函数总结 ---oracle常用函数-----一.数值型常用函数----取整数--select floor(10.1) from dual;--将n四舍五入,保留小数点后m位(默认情况 ...

  10. [git] Git in Practice

    Work flow with git and github Work with Remotes Check the current status git status Check the latest ...