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] ...
随机推荐
- Html5深受欢迎的理由
一.世界知名浏览器厂商对Html5的支持 微软:2010年微软称完成Ie9的开发后,讲更对支持css3.svg和html5等互联网浏览通用标准. Google:2010年谷歌重点开发html5项目. ...
- python redis模块的常见的几个类 Redis 、StricRedis和ConnectionPool
日常写代码过程中,经常需要连接redis进行操作.下面我就介绍下python操作redis模块redis中的几个常见类,包括redis连接池. 一.StrictRedis 类 请看代码:. #!/us ...
- Java错误和异常
Java 异常结构图 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Th ...
- pg_dump命令帮助信息
仅为参考查阅方便,完全命令行帮助信息,无阅读价值. pg_dump dumps a database as a text file or to other formats. Usage: pg_du ...
- 用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...
- 大型三甲医院信息管理系统源码 His系统功能齐全 完整可用
详情请点击查看 开发环境 :Asp.net + VS2005 + C# + SQL2010(含三种数据库access,oracle,sql server) 采用了BS+ActiveX + Web ...
- JS跨域:2.解决方案之-设置回调参数
一 服务器端代码 package com.cn; import java.util.List; import javax.servlet.http.HttpServletRequest; import ...
- python笔记:#013#高级变量类型
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- 利用百度地图api实现定位
使用百度地图api前需要先获取一个百度地图开放平台的访问应用AK, 获取百度地图开放平台访问应用AK方式:注册百度账号-->申请百度开发者-->获取密匙-->使用相关功能. 注册账号 ...
- Mac下MySQL无my-default.cnf
转自https://www.jianshu.com/p/628bcf8bb557 As of MySQL 5.7.18, my-default.ini is no longer included in ...