UVA 11796 - Dog Distance 向量的应用

用Flet构建跨平台Todo应用:从基础到高级功能实现 本文详细介绍了如何使用Flet框架从零开始构建一个功能完善的跨平台Todo应用。通过Python代码实现任务添加、删除、编辑和状态筛选等核心功能,并探讨了本地存储、动画效果和响应式布局等高级特性。Flet的声明式UI设计和跨平台支持使其成为开发轻量级桌面应用的理想选择,特别适合需要快速原型开发的场景。 阅读详情

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

题目大意:

甲和乙两条狗分别沿着一条折线跑,它们速度未知,但同时出发并且同时到达终点,并且都是匀速奔跑。求奔跑过程中两只狗的最大距离与最小距离之差。

思路:

因为运动是相对的,我们可以认为甲静止不动,乙沿着直线走。则问题就转化为点到线段的最小距离。

那么,我们对于每段分析,看谁先到达该线段的终点,则该段可以用上面的方法求。

把a看成不动的,则有b运动到了cb+vb-va(其中va,vb分别为a和b的位移向量,ca,cb分别为a和b初始位置)

那么就转换为sa到线段cb+vb-va的距离。(最小距离为点到直线,而最大距离一定在线段两边)

至于速度的表示,设1S到达终点,那么速度就是总长。

PS:直接用模版就是爽。哈哈

#include<cstdio>  
#include<cmath>  
#include<algorithm>  
using namespace std;  
const int MAXN=50+10;
const int INF=99999999;
double ans_max,ans_min;
struct Point 
{
	double x,y;
	Point(double x=0,double y=0):x(x),y(y){ }
};
typedef Point Vector;  
const double eps = 1e-8;
int dcmp(double x) { if(fabs(x) < eps) return 0; else return x < 0 ? -1 : 1; }
Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x+B.x, A.y+B.y); }  
Vector operator - (const Point& A, const Point& B) { return Vector(A.x-B.x, A.y-B.y); }  
Vector operator * (const Vector& A, double p) { return Vector(A.x*p, A.y*p); }  
Vector operator / (const Vector& A, double p) { return Vector(A.x/p, A.y/p); } 
bool operator == (const Point& a, const Point &b) {
	return dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y) == 0;
}

double Dot(const Vector& A, const Vector& B) { return A.x*B.x + A.y*B.y; }
double Cross(const Vector& A, const Vector& B) { return A.x*B.y - A.y*B.x; }
double Length(const Vector& A) { return sqrt(Dot(A, A)); }

double DistanceToSegment(const Point& P, const Point& A, const 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);
  else if(dcmp(Dot(v1, v3)) > 0) return Length(v3);
  else return fabs(Cross(v1, v2)) / Length(v1);
}

void update(Point P,Point A,Point B)
{
	ans_max=max(ans_max,Length(P-A));//最大的一定在端点
	ans_max=max(ans_max,Length(P-B));
	ans_min=min(ans_min,DistanceToSegment(P,A,B));//最小的为点到直线的距离
}

Point a[MAXN],b[MAXN];

int main()
{
	int T,kase=1;
	scanf("%d",&T);
	while(T--)
	{
		int A,B;
		scanf("%d%d",&A,&B);
		for(int i=0;i<A;i++)
			scanf("%lf%lf",&a[i].x,&a[i].y);

		for(int i=0;i<B;i++)
			scanf("%lf%lf",&b[i].x,&b[i].y);
		
		double lena=0,lenb=0;   //总长度
		for(int i=0;i<A-1;i++)
			lena+=Length(a[i+1]-a[i]);
		for(int i=0;i<B-1;i++)
			lenb+=Length(b[i+1]-b[i]);

		int ia=0,ib=0;  //index 
		Point ca=a[0],cb=b[0]; //current point
		ans_max=-INF,ans_min=INF;
		while(ia<A-1 && ib<B-1)
		{
			double sa=Length(a[ia+1]-ca);   //到下一个拐点的距离
			double sb=Length(b[ib+1]-cb);
			double ta=sa/lena;     //设到终点都为1S,那么每一段时间就是除以总长。
			double tb=sb/lenb;
			double t=min(ta,tb);   
			Vector va=(a[ia+1]-ca)/sa*t*lena;
			Vector vb=(b[ib+1]-cb)/sb*t*lenb;
			update(ca,cb,cb+vb-va);//把a看成静止的,则b相对从cb运动到了vb-va处。
			ca=ca+va;
			cb=cb+vb;
			if(ca==a[ia+1]) ia++;
			if(cb==b[ib+1]) ib++;
		}
		printf("Case %d: %.0lf\n",kase++,ans_max-ans_min);
	}

	return 0;
}


绕过限制?实测修改UA在PC端运行微信小程序的可行性及风险 本文探讨了通过修改User-Agent(UA)在PC端运行微信小程序的技术可行性及风险。分析了小程序设备限制的技术原理,包括`wx.getSystemInfo`API和UA检测机制,并提供了多种修改方案及其局限性。同时强调了潜在的安全和法律风险,推荐使用官方模拟器或安卓模拟器等更安全的替代方案。 阅读详情

相关推荐

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4278

UVA 11796 Dog Distance .

题目地址:https://vjudge.net/problem/UVA-11796 想法:对于A和B一起的每一线段,它们之间差的距离肯定要么是增函数,要么是减函数,所以答案只存在A处于莫个端点或B处于某个端点的时候 所以 剩下的目标就是如何枚举每一线段,然后更新 其中我还弄错了一个地方,我以为取答案的两个点肯定是在端点上,然而 不一定在端点上,那么在一起运动的时候,难得就是它们速度不一样,一

BRCOCOLI的博客 382

Realtek RTD1319D芯片解析:H.266与AV1双解码的机顶盒SoC

视频编解码技术是数字媒体传输的核心,H.266/VVC作为新一代标准,相比H.265提升50%压缩效率,显著降低带宽需求。其实现原理依赖于专用硬件解码器和并行处理架构,在超高清视频传输领域具有重要价值。Realtek RTD1319D作为首款商用H.266处理器,采用异构计算设计,集成四核ARM CPU和独立视频处理单元,同时支持AV1解码,兼顾市场兼容性。该SoC特别适合4K机顶盒、数字标牌等应用场景,其HDMI 2.1a接口和DVB解调器为超高清内容传输提供完整解决方案。开发时需注意散热设计和内存配置优

weixin_42591413的博客 671

UVa 11796

题后反思:复杂的问题总是可以考虑最简单的情况再加以变形,本题正是建立在解决简单的问题之上的,两条线段问最大距离-最小距离无疑是简单的,考察端点即可。而折线段恰好可以分解为多个线段,问题得以解决。 #include&lt;bits/stdc++.h&gt; using namespace std; struct Point {     double x,y;     Point(double x=...

Goodbye_的博客 243

SoC设计中的RDC陷阱:如何避免异步复位导致的亚稳态问题

本文深入探讨了SoC设计中由异步复位引发的复位域交叉(RDC)陷阱及其导致的亚稳态风险。通过分析实际案例,文章系统性地提出了以同步复位优先、异步复位同步释放为核心的设计原则,并介绍了电路级加固与验证策略,为构建稳健的SoC复位架构提供了实用指南。

weixin_29280657的博客 419

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2663

Uva 11796 Dog Distance

题意: 见白书... 思路: 我们只要按照相对运动来处理就好了,不过这里一定要理解,相对运动是通过向量来解决的,如果单纯的依靠速度来决定他的走向的话,只有两条线段平行的时候才可以。然后就是模拟这个相对运动的过程,看谁先到达拐点然后处理。 #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cmath&gt...

weixin_34370347的博客 144

LayaBox CommandBuffer描边使用详细

项目需要使用LayaBox做一个给3D物体动态描边的一个功能,前前后后踩了一些坑算是把这个东西给做出来了把我改好的代码贴上,分享给大家。 (1)想要使用描边你的引擎版本必须 >=2.9.0 (2)你必须下载 Laya官方的BlurShader库才能使用这个功能,下载地址:https://github.com/layabox/layaair-demo/tree/master/h5/3d/ts/LayaAir3D_PostProcess/BlurShader 下载完之后把BlurShader放到自己项目的

小智队长 1732

UVA 11796 Dog Distance

这个题就是 对于两个折线,看谁能先走到 折点就按照那个时间走,

Shimmer_的专栏 783

大疆2025八月份校招硬件工程师笔试真题A卷题目分享

大疆2025年笔试真题解析

weixin_63651698的博客 1566

使用 MATLAB/Simulink 进行锂电池SOC估算和等效电路建模

本文介绍了使用MATLAB/Simulink进行锂电池SOC估算与等效电路建模的方法。首先阐述了SOC估算和等效电路模型的背景及重要性,然后详细讲解了系统结构设计的主要组成部分,包括电池模块、SOC估算模块(采用卡尔曼滤波器算法)和等效电路模型等。文章重点分步说明了建模过程:从创建Simulink项目、搭建电池模块,到实现SOC估算算法(提供示例代码),构建等效电路模型(Thevenin模型示例),添加传感器模块,最后设置仿真参数。通过仿真运行分析关键指标(SOC估算误差、电压偏差等)来评估模型性能,为锂电

xiaoheshang_123的博客 263

uva 11796 - Dog Distance(几何)

题目链接:uva 11796 - Dog Distance 将一只狗位移向量加到另一只上,即变成点到线段的最短距离。 #include #include #include #include using namespace std; const double pi = 4 * atan(1); const double eps = 1e-9; inline int d

不慌不忙、不急不躁 810

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA11796 Dog Distance 计算几何

计算几何: 题解转自:点击打开链接 首先我们想一下如果甲乙都仅沿着两条线段向前跑,那么他们之间的最短和最长距离怎么算? 假设甲的速度向量为v1(速度向量指甲单位时间所走的位移向量),乙的速度向量为v2. 那么可以把甲看成是静止不动的,而让乙一个人以v2-v1的速度向量去运动(画图验证下).        且假设甲和乙都运动了t秒时间,那么我们可以知道上面的过程类似于甲不动

码代码的猿猿 1352

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

UVa 11796 Dog Distance

题目要求计算两条狗沿不同折线路径奔跑时的"狗距离",即最大距离与最小距离之差。两条狗以恒定速度同时开始和结束奔跑,总时间相同。通过预处理路径长度,利用相对运动参数化分析每个时间段内的距离变化。算法采用分段模拟方法跟踪两狗的位置,在每个时间段内检测距离函数的极值(端点和平稳点)。最后输出四舍五入后的结果。该算法能正确捕捉连续运动中的距离变化,复杂度为线性。

寂静山林 722

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

UVA 11796 Dog Distance(点与向量)

UVA 11796 Dog Distance(点与向量) http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=528&page=show_problem&problem=2896 题意:        甲和乙两条狗分别沿着两条折线各自奔跑, 他们同时出发,且同时到达终点. 现在要你求他们之

code 1214

Dog Distance UVA - 11796

思路:对甲乙,看谁先到达拐点。分析从之前的位置到拐点的位置两者的运动过程,那么这个过程中两者都做的直线运动,而且运动是相对的,则把甲看成静止的,乙做相对运动。更新出在这个过程中的最大值和最小值。并更新甲乙经过此轮运动后所在位置。然后再找谁先到拐点。。。。直到到末位置为止。 #include<iostream> #include<cstdio> #include<c...

蒟蒻小胖 219

UVA 11796 Dog Distance

注意最后结果是四舍五入到最近的整数 #include <iostream> #include <algorithm> #include <math.h> using namespace std; double Min,Max; struct Point { double x,y; Point...

bandiaodai5734的博客 163

【UVA】11796 - Dog Distance(相对运动)

几何、向量计算

花月阁 1032

UVA 11796 Dog Distance 向量+相对运动

题意:训练指南261页#include #include #include #include #include #include #include #include #include #include using namespace std;#define MM(a) memset(a,0,sizeof(a))typedef long long ll;typedef unsigned long l

smilesundream的博客 468

UVA 11796 Dog Distance(二维几何基本模板)

题目大意: 甲和乙两条狗分别沿着一条折线跑,它们速度未知,但同时出发并且同时到达终点,并且都是匀速奔跑。求奔跑过程中两只狗的最大距离与最小距离之差。 思路: 因为运动是相对的,我们可以认为甲静止不动,乙沿着直线走。则问题就转化为点到线段的最小距离。 那么,我们对于每段分析,看谁先到达该线段的终点,则该段可以用上面的方法求。 把a看成不动的,则有b运动到了cb+vb-v

Ezereal的博客 513

UVA 11796 - Dog Distance

UVA 11796 - Dog Distance 题意  两条狗啊,同时跑,,同时结束,各自跑各自的道路,问跑的过程中,他们最大距离和最小距离的差; 方法  恶心一点就是,最大最小距离的求解方法,假设两只狗都只有一条线段要跑,则可以判定在端点处有最大值,最小值的求解方法就是,把一条狗的奔跑方向分解成另一个狗的奔跑方向 + 另外一个向量,这样这条狗相对于另外一条狗处于相对静止;只

qing101hua的专栏 378

uva11796 Dog Distance

点到线段距离

YHaX的博客 540

UVA 11796 Dog Distance 几何

给两个点的序列,表示两只狗的运动路径,保证a,b同时出发同时到达终点,求

Broken Wings 710
上一篇: UVA 11646 - Athletics Track || UVA 11817 - Tunnelling the Earth 几何
下一篇: UVA 10125 - Sumsets(POJ 2549) hash
hr_whisper
博客等级 码龄14年 132粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值