题意

PDF

分析

问题可以转化为小问题,即两条狗分别在线段上运动。

然后用相对运动知识可以认为甲不动,乙在线段上运动。

小问题就转化为点到线段的最小或最大距离。

时间复杂度\(O(I \times (A+B))\)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<ctime>
#include<cstring>
#define rg register
#define il inline
#define co const
template<class T>il T read()
{
rg T data=0;
rg int w=1;
rg char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
{
data=data*10+ch-'0';
ch=getchar();
}
return data*w;
}
template<class T>T read(T&x)
{
return x=read<T>();
}
using namespace std;
typedef long long ll; co double eps=1e-10;
int dcmp(double x)
{
if(fabs(x)<eps)
return 0;
else
return x<0?-1:1;
} struct Point
{
double x,y;
Point(double x=0,double y=0)
:x(x),y(y){} bool operator<(co Point&rhs)co
{
return x<rhs.x||(x==rhs.x&&y<rhs.y);
} bool operator==(co Point&rhs)co
{
return dcmp(x-rhs.x)==0&&dcmp(y-rhs.y)==0;
}
};
typedef Point Vector; Vector operator+(Vector A,Vector B)
{
return Vector(A.x+B.x,A.y+B.y);
} Vector operator-(Point A,Point B)
{
return Vector(A.x-B.x,A.y-B.y);
} Vector operator*(Vector A,double p)
{
return Vector(A.x*p,A.y*p);
} Vector operator/(Vector A,double p)
{
return Vector(A.x/p,A.y/p);
} double Dot(Vector A,Vector B)
{
return A.x*B.x+A.y*B.y;
} double Length(Vector A)
{
return sqrt(Dot(A,A));
} double Angle(Vector A,Vector B)
{
return acos(Dot(A,B)/Length(A)/Length(B));
} double Cross(Vector A,Vector B)
{
return A.x*B.y-A.y*B.x;
} double Area2(Point A,Point B,Point C)
{
return Cross(B-A,C-A);
} Vector Rotate(Vector A,double rad)
{
return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));
} Vector Normal(Vector A)
{
double L=Length(A);
return Vector(-A.y/L,A.x/L);
} Point GetLineIntersection(Point P,Vector v,Point Q,Vector w)
{
Vector u=P-Q;
double t=Cross(w,u)/Cross(v,w);
return P+v*t;
} double DistanceToLine(Point P,Point A,Point B)
{
Vector v1=B-A,v2=P-A;
return fabs(Cross(v1,v2))/Length(v1);
} double DistanceToSegment(Point P,Point A,Point B)
{
if(A==B)
return Length(P-A);
Vector v1=B-A,v2=P-A,v3=P-B;
if(dcmp(Dot(v1,v2))<0)
return Length(v2);
if(dcmp(Dot(v1,v3))>0)
return Length(v3);
return DistanceToLine(P,A,B);
} Point GetLineProjection(Point P,Point A,Point B)
{
Vector v=B-A;
return A+v*(Dot(v,P-A)/Dot(v,v));
} bool SegmentProperIntersection(Point a1,Point a2,Point b1,Point b2)
{
double c1=Cross(a2-a1,b1-a1),c2=Cross(a2-a1,b2-a1),
c3=Cross(b2-b1,a1-b1),c4=Cross(b2-b1,a2-b1);
return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0;
} bool OnSegment(Point p,Point a1,Point a2)
{
return dcmp(Cross(a1-p,a2-p))==0&&dcmp(Dot(a1-p,a2-p))<0;
} double PolygonArea(Point*p,int n)
{
double area=0;
for(int i=1;i<n-1;++i)
area+=Cross(p[i]-p[0],p[i+1]-p[0]);
return area/2;
} co int N=50;
int A,B;
Point P[N],Q[N];
double Min,Max; void update(Point P,Point A,Point B)
{
Min=min(Min,DistanceToSegment(P,A,B));
Max=max(Max,Length(P-A));
Max=max(Max,Length(P-B));
} int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int T=read<int>();
for(int kase=1;kase<=T;++kase)
{
read(A);read(B);
for(int i=0;i<A;++i)
{
read(P[i].x);read(P[i].y);
}
for(int i=0;i<B;++i)
{
read(Q[i].x);read(Q[i].y);
} double LenA=0,LenB=0;
for(int i=0;i<A-1;++i)
LenA+=Length(P[i+1]-P[i]);
for(int i=0;i<B-1;++i)
LenB+=Length(Q[i+1]-Q[i]); int Sa=0,Sb=0;
Point Pa=P[0],Pb=Q[0];
Min=1e9,Max=-1e9;
while(Sa<A-1&&Sb<B-1)
{
double La=Length(P[Sa+1]-Pa);
double Lb=Length(Q[Sb+1]-Pb);
double T=min(La/LenA,Lb/LenB);
Vector Va=(P[Sa+1]-Pa)/La*T*LenA;
Vector Vb=(Q[Sb+1]-Pb)/Lb*T*LenB;
update(Pa,Pb,Pb+Vb-Va);
Pa=Pa+Va;
Pb=Pb+Vb;
if(Pa==P[Sa+1])
++Sa;
if(Pb==Q[Sb+1])
++Sb;
}
printf("Case %d: %.0lf\n",kase,Max-Min);
}
return 0;
}

UVA11796 Dog Distance的更多相关文章

  1. UVA 11796 Dog Distance(几何)

    Dog Distance [题目链接]Dog Distance [题目类型]几何 &题解: 蓝书的题,刘汝佳的代码,学习一下 &代码: // UVa11796 Dog Distance ...

  2. 简单几何(相对运动距离最值) UVA 11796 Dog Distance

    题目传送门 题意:两只狗在折线上跑,速度未知,同时出发,同时达到.问跑的过程中,两狗的最大距离和最小距离的差 分析:训练指南P261,考虑相对运动,设A静止不动,B相对A运动,相对的运动向量:Vb - ...

  3. UVA 11796 - Dog Distance

    题意  两条狗啊,同时跑,,同时结束,各自跑各自的道路,问跑的过程中,他们最大距离和最小距离的差: 方法  恶心一点就是,最大最小距离的求解方法,假设两只狗都只有一条线段要跑,则可以判定在端点处有最大 ...

  4. UVA 11796 Dog Distance(向量)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31962 [代码] #include<cstdio> # ...

  5. ●UVA 11796 Dog Distance

    题链: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UVA 11796 - Dog Distance 向量的应用

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  7. [GodLove]Wine93 Tarining Round #9

    比赛链接: http://vjudge.net/contest/view.action?cid=48069#overview 题目来源: lrj训练指南---二维几何计算   ID Title Pro ...

  8. UVA_11796_Dog_Distance_(计算几何)

    描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  9. uva 11798 相对运动的最小最大距离

    C Dog Distance Input Standard Input Output Standard Output Two dogs, Ranga and Banga, are running ra ...

随机推荐

  1. 20165101刘天野 2018-2019-2《网络对抗技术》Exp5 MSF基础应用

    目录 20165101刘天野 2018-2019-2<网络对抗技术>Exp5 MSF基础应用 1. 实践内容 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器 ...

  2. select 下拉框 设置值

    function setSelectOption(objSelect, targetValue){ if(objSelect){ var options = objSelect.options; if ...

  3. 详细Http状态查询

    状态代码 状态信息 含义 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转 ...

  4. contos LAMP环境搭建

    LINUX搭建LAMP笔记 .YUM:Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于R ...

  5. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解 .

    http://blog.csdn.net/lucherr/article/details/8498400 看资料的时候经常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家: 这些术语都是 ...

  6. Hibernate -- 映射多对多双向关联关系

    1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...

  7. 源码安装LNMP与搭建Zabbix

    系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一.下载NMP的软件包: N:wget http://nginx.org/d ...

  8. combo

    什么是combo 上一节中我们有一行代码: <script src="http://g.tbcdn.cn/kissy/k/1.4.8/??seed-min.js,import-styl ...

  9. 智课雅思词汇---二十六、形容词后缀-ble

    智课雅思词汇---二十六.形容词后缀-ble 一.总结 一句话总结: assemble 英 [ə'semb(ə)l]  美 [ə'sɛmbl]  vt. 集合,聚集:装配:收集 vi. 集合,聚集 [ ...

  10. SeekBar拖动条控件

    SeekBar拖动条控件 一.简介 1. 二.SeekBar拖动条控件使用方法 1.创建SeekBar控件 <SeekBar android:id="@+id/SeekBar1&quo ...