BZOJ 2592 随机化(伪)
思路:
放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 随机化(伪)的更多相关文章
- @bzoj - 4524@ [Cqoi2016]伪光滑数
目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...
- Bzoj 4524 [Cqoi2016]伪光滑数(堆)
题面 题解 先筛出$<128$的质数,很少,打个表即可 然后钦定一个质数最大,不断替换即可(丢进大根堆里面,然后取出一个,替换在丢进去即可) 具体来说,设一个四元组$[t,x,y,z]$表示当前 ...
- BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)
题目链接 模拟退火: 模拟退火!每次随机一个位置加给sum[]最小的组. 参数真特么玄学啊..气的不想调了(其实就是想刷刷最优解) 如果用DP去算好像更准.. //832kb 428ms #inclu ...
- 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基
用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...
- BZOJ 3786: 星系探索 [伪ETT]
传送门 数据,标程 题意: 一颗有根树,支持询问点到根路径权值和,子树加,换父亲 欧拉序列怎么求路径权值和? 一个点的权值只会给自己的子树中的点贡献,入栈权值正出栈权值负,求前缀和就行了! 和上题一样 ...
- BZOJ 3729: Gty的游戏 [伪ETT 博弈论]【学习笔记】
题意: 给定一棵有根树,每个节点有一些石子,每次可以将不多于k的石子移动到父节点 修改一个点的石子数,插入一个点,询问某棵子树是否先手必胜 显然是一个阶梯Nim 每次最多取k个,找规律或者观察式子易发 ...
- BZOJ.5397.circular(随机化 贪心)
BZOJ 感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq. 基本完全抄自remoon的题解qwq... (下标从\(0\sim m-1\)) 拆环为链,对于原线段\( ...
- BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化
http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
随机推荐
- 腾讯云:搭建 Node.js 环境
搭建 Node.js 环境 安装 Node.js 环境 任务时间:5min ~ 10min Node.js 是运行在服务端的 JavaScript, 是基于 Chrome JavaScript V8 ...
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...
- 通过混合编程分析的方法和机器学习预测Web应用程序的漏洞
通过混合编程分析的方法和机器学习预测Web应用程序的漏洞 由于时间和资源的限制,web软件工程师需要支持识别出有漏洞的代码.一个实用的方法用来预测漏洞代码可以提高他们安全审计的工作效率.在这篇文章中, ...
- HDU 1274 递归拼接字符串
题目大意: 根据所给的数字,表示其相连的字符的输出个数,或是下一个括号中的所有字符的输出个数 每一个相互对应的 '(' 和 ')' 中的所有字母均作为一组数据处理 在每一次dfs过程中都处理好这样一个 ...
- SGU -1500 - Pass Licenses
先上题目: 1500. Pass Licenses Time limit: 2.5 secondMemory limit: 64 MB A New Russian Kolyan believes th ...
- ci get_instance()
你随便下个CI框架的源码都会看到很多的get_instance() 函数,这个函数是用来获取CI 的全局超级对象,CI 是单例模式的框架,所有全局有一个超级对象.因为只有一个实例,所以无论这个函数使用 ...
- vector实现
typedef int size_type; /* vector维护的是一个连续线性空间,提供的迭代器是Random Access Iterators即普通指针 */ template <cla ...
- C++对象模型——"无继承"情况下的对象构造(第五章)
5.1 "无继承"情况下的对象构造 考虑以下这个程序片段: 1 Point global; 2 3 Point foobar() 4 { 5 Point local; 6 Poin ...
- swift 2.0 语法 字典
//: Playground - noun: a place where people can play import UIKit /*: 字典 * 和OC的区别 * 1. {} 替换为 [] * 2 ...
- HDU 5325 Crazy Bobo(思路+dfs 记忆化)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...