思路:

放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. CentOS7 安装、配置 Memcached

    点击访问原文地址 介绍 Memcached 是一个分布式.高性能的内存缓存系统,通过缓存内存中的数据和对象,提高和加速动态 web 应用程序的性能.它主要用于加速对数据库重度使用的站点. Memcac ...

  2. CCF201609-2 火车购票 java(100分)

    试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一 ...

  3. ffmpeg 视音处理

    (经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试一下,有问题欢迎在下面回帖交流,谢谢;by te ...

  4. java8的LocalDateTime真心好用(补充Period.between的大坑)

    LocalDateTime.LocalDate是java8新增的时间工具类,最近使用后,真心觉得强大好用,推荐文章:https://www.liaoxuefeng.com/article/001419 ...

  5. [Codeforces 876]比赛记录

    上场$rating$果然炸飞,但是据说这次只要不$FST$就能翻回来QWQ? T1  $dfs$乱搞? T2  取模乱搞,$STL$ $vector$大法好(%%%$ryf$秒出做法) T3  看了半 ...

  6. [ZJOI2008]杀蚂蚁antbuster

    [ZJOI2008]杀蚂蚁antbuster 题目 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试 ...

  7. Ubuntu16.04再次装机记

    个人的吐槽 整个国庆假期(9天),基本上都在搭建PHP环境中耗费了. 是这样的——来大学报到前,想着大学里用个Dev-C++应该够了,于是把Ubuntu删了,腾出了100G的空间.到了CSU,加了团委 ...

  8. [luoguP2285] [HNOI2004]打鼹鼠(DP)

    传送门 设f[i]表示i个鼹鼠出现后,打死鼹鼠的最大值 动态转移方程:f[i]=max{f[j]+1}, 条件:abs(x[i]-x[j])+abs(y[i]-y[j])<=time[i]-ti ...

  9. 洛谷——P2212 [USACO14MAR]浇地Watering the Fields

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  10. zoj 月赛

    Wumpus Time Limit: 2 Seconds      Memory Limit: 65536 KB One day Leon finds a very classic game call ...