bzoj3199 [Sdoi2013]escape
这题真tm是醉了。
就是对于每个亲戚,利用其它的亲戚对他半平面交求出其控制的范围,然后随便跑个最短路就行了
n=0卡了我一下午//////
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 666
#define eps 1e-12
using namespace std;
int g[N][N];
struct point{
double x[];
point(){}
point(double a,double b){x[]=a,x[]=b;}
double & operator [] (int a){return x[a];}
}p[N];
double dis(point a,point b){
return sqrt((b[]-a[])*(b[]-a[])+(b[]-a[])*(b[]-a[]));
}
struct line{
double a,b,c,k;
int id;
line(){}
line (double x,double y,double z,int pos){
a=x;b=y;c=z;
k=atan2(-x,y);id=pos;
}
void rev(){
a=-a;b=-b;c=-c;
k=atan2(-a,b);
}
}l[N],q[N];
int T,n,bot,tot,top,be,ans;
double wx,wy,sx,sy,d;
bool cmp(line a,line b){
if(fabs(a.k-b.k)<eps)return a.c<b.c;
return a.k<b.k;
}
point cross(line a,line b){
double x=(b.c*a.b-a.c*b.b)/(a.a*b.b-a.b*b.a);
double y=(b.c*a.a-a.c*b.a)/(a.b*b.a-a.a*b.b);
return point(x,y);
}
bool judge(point a,line b){
return a[]*b.a+a[]*b.b+b.c<-eps;
}
void addline (point a,point b,int id){
point c=point((a[]+b[])/,(a[]+b[])/);
if(a[]==b[])l[++tot]=line(0.0,1.0,-c[],id);
else if(a[]==b[])l[++tot]=line(1.0,0.0,-c[],id);
else l[++tot]=line(1.0,(b[]-a[])/(b[]-a[]),-c[]-(b[]-a[])/(b[]-a[])*c[],id);
if(judge(a,l[tot]))l[tot].rev();
}
void work(int x){
register int i,j;
sort(l+,l+tot+,cmp);
for(i=,j=;i<=tot;i++)
if(fabs(l[i].k-l[j].k)>=eps)l[++j]=l[i];
tot=j;
bot=;top=;
q[]=l[];q[]=l[];
for(i=;i<=tot;i++){
while(bot<top&&judge(cross(q[top-],q[top]),l[i]))top--;
while(bot<top&&judge(cross(q[bot+],q[bot]),l[i]))bot++;
q[++top]=l[i];
}
while(bot<top&&judge(cross(q[top-],q[top]),q[bot]))top--;
for(i=bot;i<=top;i++){
if(q[i].id)g[x][q[i].id]=g[q[i].id][x]=;
else g[x][n+]=g[n+][x]=;
}
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
if(!n){puts("");continue;}
memset(g,0x3f,sizeof g);
scanf("%lf%lf%lf%lf",&wx,&wy,&sx,&sy);
for(int i=;i<=n;i++)
scanf("%lf%lf",&p[i][],&p[i][]);
for(int i=;i<=n;i++){
tot=;
for(int j=;j<=n;j++)if(j!=i)
addline(p[i],p[j],j);
addline(p[i],point(-p[i][],p[i][]),);
addline(p[i],point(p[i][],-p[i][]),);
addline(p[i],point(*wx-p[i][],p[i][]),);
addline(p[i],point(p[i][],*wy-p[i][]),);
work(i);
}
d=g[][];ans=;
for(int i=;i<=n;i++){
double now=dis(point(sx,sy),p[i]);
if(now<d)d=now,be=i;
}
for(int k=;k<=n+;k++)
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
ans=g[be][n+]+;
printf("%d\n",ans);
}
return ;
}
bzoj3199 [Sdoi2013]escape的更多相关文章
- [BZOJ3199][SDOI2013]escape:半平面交
分析 好像叫V图什么的. 容易发现,对于每个点,其监视的范围就是这个点与其它所有点的垂直平分线分割平面后的半平面交.由于数据范围很小,所以我们可以直接枚举每个点,使用双端队列求出其监视的范围.若两个点 ...
- BZOJ3199 SDOI2013 逃考 半平面交、最短路
传送门 如果我们对于每一个点能找到与其相邻的点(即不经过其他点监视范围能够直接到达其监视范围的点)和是否直接到达边界,就可以直接BFS求最短路求出答案. 所以当前最重要的问题是如何找到对于每一个点相邻 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【JZOJ3297】【SDOI2013】逃考(escape)
Mission 高考又来了,对于不认真读书的来讲真不是个好消息.为了小杨能在家里认真读书,他的亲戚决定驻扎在他的家里监督他学习,有爷爷奶奶.外公外婆.大舅.大嫂.阿姨-- 小杨实在是忍无可忍了,这种生 ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- 简单明了区分escape、encodeURI和encodeURIComponent
一.前言 讲这3个方法区别的文章太多了,但是大部分写的都很绕.本文试图从实践角度去讲这3个方法. 二.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种 ...
- c#模拟js escape方法
public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] ba = System.T ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- 【BZOJ-1340】Escape逃跑问题 最小割
1340: [Baltic2007]Escape逃跑问题 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 264 Solved: 121[Submit] ...
随机推荐
- jasper(二):制作饼状图和柱状图
在新建一个框架之后 我们也是要执行 add dataset,来添加一个链接数据库的语句,因为这是个饼状图,所以要用group by 全部放入右边的框架 点完成 接下来,就是要创建饼状图,就要点击 窗口 ...
- JavaScript继承详解
面向对象与基于对象 在传统面向对象的语言中,有两个非常重要的概念 - 类和实例. 类定义了一类事物公共的行为和方法:而实例则是类的一个具体实现. 我们还知道,面向对象编程有三个重要的概念 - 封装.继 ...
- JS核心笔记
一.说明 JS权威指南文字用红色标出: JS高级程序设计用橙色标出; 自己加上的文字用粉红色标出: 其(一)-(九)为JS权指南,(十)为JS高级程序设计 二.记法结构 2.1字符集 Javascri ...
- 使用mpvue开发微信小程序
更多内容请查看 我的新博客 地址 : 前言 16年小程序刚出来的时候,就准备花点时间去学学.无奈现实中手上项目太多,一个接着一个,而且也没有开发小程序的需求,所以就一拖再拖. 直到上周,终于有一个小程 ...
- Nginx SSL功能支持的一些资料。
http://wiki.nginx.org/HttpSslModulehttp://zou.lu/nginx-https-ssl-module/http://www.21andy.com/blog/2 ...
- MVC-AOP思想-Filter 三种注册方式
在ASP.NET MVC框架中,为我们提供了四种类型的Filter类型包括:IAuthorizationFilter.IActionFilter.IResultFilter.IExceptionFil ...
- windows下用C++修改本机IP地址
两种方法 第一种.使用DOS命令(即时生效) 第二种.修改注册表(重启生效) 1.打开SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards ...
- API管理平台XXL-API
<API管理平台XXL-API> 一.简介 1.1 概述 XXL-API是一个简洁易用API管理平台,提供API的"管理"."文档"."M ...
- RabbitMQ Linux(Redhat6.5)安装(二 )
一.安装erlang 由于RabbitMq的linux运行环境需要erlang环境,所以需要先安装erlang: 1.erlang下载: http://erlang.org/download/(我下载 ...
- 分析DuxCms之AdminUserModel
/** * 获取信息 * @param array $where 条件 * @return array 信息 */ public function getWhereInfo($where) { ret ...