思路:

放yousiki大爷题解

http://yousiki.net/index.php/archives/82/

我写的是随机化

既然gzz证了最终答案的上界是O(N)的

那么我们可以n^2枚举所有的点对

先pretest判一发 (随机10个点  找找有没有对称点)  如果过了pretest再O(n)的判

整体复杂度是$O(n^2logn)$的

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int mod=,N=;
int n,xx,yy,ans=;
struct Point{double x,y;Point(){}Point(double X,double Y){x=X,y=Y;}}point[N];
Point operator-(Point a,Point b){return Point(a.x-b.x,a.y-b.y);}
double operator*(Point a,Point b){return a.x*b.y-a.y*b.x;}
bool operator<(Point a,Point b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}
struct Line{Point a,b;Line(){}Line(Point X,Point Y){a=X,b=Y;}}stk[N*];
Line get_line(int i,int j){
Point x=Point((point[i].x+point[j].x)/,(point[i].y+point[j].y)/);
Point y=Point(x.x+point[j].y-point[i].y,x.y-point[j].x+point[i].x);
return Line(x,y);
}
double dis(Point a,Point b){a=a-b;return sqrt(a.x*a.x+a.y*a.y);}
Point get_point(Point p,Line ln){
double d=(ln.b-ln.a)*(p-ln.a)/dis(ln.a,ln.b)*,x=ln.b.y-ln.a.y,y=ln.a.x-ln.b.x,s=sqrt(x*x+y*y);
return Point(p.x+x*d/s,p.y+y*d/s);
}
bool pretest(Line ln){
for(int i=;i<=;i++){
Point p=get_point(point[rand()%n+],ln);
double x=round(p.x),y=round(p.y);
if(abs(x-p.x)>1e-||abs(y-p.y)>1e-)return ;
Point f=Point(x,y);
int t=lower_bound(point+,point++n,f)-point;
if(t>n||abs(point[t].x-f.x)>1e-||abs(point[t].y-f.y)>1e-)return ;
}return ;
}
bool test(Line ln){
for(int i=;i<=n;i++){
Point p=get_point(point[i],ln);
double x=round(p.x),y=round(p.y);
if(abs(x-p.x)>1e-||abs(y-p.y)>1e-)return ;
Point f=Point(x,y);
int t=lower_bound(point+,point++n,f)-point;
if(t>n||abs(point[t].x-f.x)>1e-||abs(point[t].y-f.y)>1e-)return ;
}return ;
}
bool check(Line tmp){for(int i=;i<=ans;i++)if(abs((stk[i].a-stk[i].b)*(tmp.a-tmp.b))<1e-)return ;return ;}
int main(){
srand();scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&xx,&yy),point[i]=Point(1.0*xx,1.0*yy);
sort(point+,point++n);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
Line tmp=get_line(i,j);
if(check(tmp)&&pretest(tmp)&&test(tmp))stk[++ans]=tmp;
tmp=Line(point[i],point[j]);
if(check(tmp)&&pretest(tmp)&&test(tmp))stk[++ans]=tmp;
}
printf("%d\n",ans);
}

BZOJ 2592 随机化(伪)的更多相关文章

  1. @bzoj - 4524@ [Cqoi2016]伪光滑数

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  2. Bzoj 4524 [Cqoi2016]伪光滑数(堆)

    题面 题解 先筛出$<128$的质数,很少,打个表即可 然后钦定一个质数最大,不断替换即可(丢进大根堆里面,然后取出一个,替换在丢进去即可) 具体来说,设一个四元组$[t,x,y,z]$表示当前 ...

  3. BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)

    题目链接 模拟退火: 模拟退火!每次随机一个位置加给sum[]最小的组. 参数真特么玄学啊..气的不想调了(其实就是想刷刷最优解) 如果用DP去算好像更准.. //832kb 428ms #inclu ...

  4. 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基

    用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...

  5. BZOJ 3786: 星系探索 [伪ETT]

    传送门 数据,标程 题意: 一颗有根树,支持询问点到根路径权值和,子树加,换父亲 欧拉序列怎么求路径权值和? 一个点的权值只会给自己的子树中的点贡献,入栈权值正出栈权值负,求前缀和就行了! 和上题一样 ...

  6. BZOJ 3729: Gty的游戏 [伪ETT 博弈论]【学习笔记】

    题意: 给定一棵有根树,每个节点有一些石子,每次可以将不多于k的石子移动到父节点 修改一个点的石子数,插入一个点,询问某棵子树是否先手必胜 显然是一个阶梯Nim 每次最多取k个,找规律或者观察式子易发 ...

  7. BZOJ.5397.circular(随机化 贪心)

    BZOJ 感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq. 基本完全抄自remoon的题解qwq... (下标从\(0\sim m-1\)) 拆环为链,对于原线段\( ...

  8. BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化

    http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...

  9. bzoj 2428: [HAOI2006]均分数据 随机化

    2428: [HAOI2006]均分数据 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

随机推荐

  1. bootstrap中栅格系统的原理

    1.基本结构 Bootstrap采取12列的栅格体系,根据主流设备的尺寸进行分段,每段宽度固定,通过百分比和媒体查询实现响应式布局. Bootstrap划分了四种尺寸:超小屏(手机).小屏(平板竖屏) ...

  2. mac下用crontab实现pytho3脚本自动定期执行,包括scrapy的定期执行

    呃 其实要明天上午才能知道是否成功,毕竟改了一个小参数的. 首先,来学两个小命令: step1: $ sudo crontab -e step2: # 然后提示password输入密码,即可进入编辑页 ...

  3. Convolutions in TensorFlow

    Convolutions in TensorFlow Convolutions without training You might already be familiar with the term ...

  4. MySql 执行计划解读

    说明 解读执行计划l对于我们日常工作中慢sql的分析和调优有很大帮助,同时在解读的过程中也能知道如何规避慢sql 建议需要了解join匹配原理的知识:https://www.cnblogs.com/L ...

  5. 矩形面积求并(codevs 3044)

    题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...

  6. WinForm 中限制只能输入数字

    在Winform(C#)中要实现限制Textbox只能输入数字,一般的做法就是在按键事件中处理,判断keychar的值.限制只能输入数字,小数点,Backspace,del这几个键.数字0~9所对应的 ...

  7. Set database resumable

    You can use bellow command to make your session resumable. Which means that if your session hit spac ...

  8. windows 2008 64位在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

    在本机32位环境中使用access数据库正常. 公布到server上时提示:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 server是64位环境.windows 2008,64位的t ...

  9. JavaScript初探之——图片移动

    在我们打开页面的时候我们看到的大部分页面都是动态的,曾经学习VB的时候要实现一些动态的画面第一个想到的就是用Flash,如今学习了BS的东西,才算是开眼界了,刚刚学习了一个动画的效果,给大家展示一下. ...

  10. 论文笔记:目标追踪-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking

    基于自适应颜色属性的目标追踪 Adaptive Color Attributes for Real-Time Visual Tracking 基于自适应颜色属性的实时视觉追踪 3月讲的第一篇论文,个人 ...