博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11796Dog Distance[平面几何]
阅读量:6847 次
发布时间:2019-06-26

本文共 2069 字,大约阅读时间需要 6 分钟。

刘汝佳白书上的题,有一个很好的技巧是把两个处于惯性参考系的物体中的一个看做静止,另一个做相对运动,把两个匀速运动的物体间的距离换成了静止的点到线段的距离。很好的题

计算几何的题代码很多,注意细心。

#include "bits/stdc++.h"using namespace std;const int maxn = 100;const double eps=1e-8;struct Point {    double x, y;    Point(double x = 0, double y = 0):x(x), y(y) {}};typedef Point Vector;Point operator + (Point A, Point B) {    return Point(A.x+B.x, A.y+B.y);}Point operator - (Point A, Point B) {    return Point(A.x-B.x, A.y-B.y);}Point operator * (Point A, double p) {    return Point(A.x*p, A.y*p);}Point operator / (Point A, double p) {    return Point(A.x/p, A.y/p);}bool operator < (const Point& a, const Point& b) {    return a.x
0) return Length(v3); else return fabs(Cross(v1,v2))/Length(v1);}void GetPoint(Point& P) { scanf("%lf%lf", &P.x, &P.y);}Point a[maxn], b[maxn];int main(int argc, char const *argv[]){ int T; int Kcase = 0; scanf("%d", &T); while (T--) { int A, B; double lena = 0; double lenb = 0; scanf("%d%d", &A, &B); double minn = 0x3f3f3f3f, maxx = 0; for (int i = 0; i < A; i++) GetPoint(a[i]); for (int i = 0; i < B; i++) GetPoint(b[i]); int cnta = 0, cntb = 0; for (int i = 1; i < A; i++) lena += Length(a[i]-a[i-1]); for (int i = 1; i < B; i++) lenb += Length(b[i]-b[i-1]); double Va = lena, Vb = lenb; Point Pa = a[0], Pb = b[0]; while (cnta < A-1 && cntb < B-1) { double La = Length(a[cnta+1]-Pa); double Lb = Length(b[cntb+1]-Pb); double time = min(La/Va, Lb/Vb); Vector Da = (a[cnta+1]-Pa)/La*time*Va; Vector Db = (b[cntb+1]-Pb)/Lb*time*Vb; minn = min(minn, DistanceToSegment(Pa, Pb, Pb+Db-Da)); maxx = max(maxx, Length(Pa-Pb)); maxx = max(maxx, Length(Pa-Pb-Db+Da)); Pa = Pa + Da; Pb = Pb + Db; if (Pa == a[cnta+1]) cnta++; if (Pb == b[cntb+1]) cntb++; } printf("Case %d: %.0lf\n", ++Kcase, maxx-minn); } return 0;}

 

转载于:https://www.cnblogs.com/cniwoq/p/7287178.html

你可能感兴趣的文章
Java魔法堂:注释和注释模板
查看>>
手动设定实例变量的KVO实现监听
查看>>
【索引】分区表索引重建过程的10704事件跟踪
查看>>
Magento系统中应用的12种设计模式
查看>>
HTTPS接口加密和身份认证(转)
查看>>
翻翻git之---利用RecyclerView实现折叠效果 SectionedExpandableGridRecyclerView
查看>>
如何将网站附件远程存储到oss
查看>>
【SpringMVC整合MyBatis】validation校验-商品修改校验
查看>>
AngularJS 控制器
查看>>
nginx内部锁的实现
查看>>
成长的印记
查看>>
webpack4.x实战五,js支持ES6;css支持less、浏览器兼容
查看>>
微信对账单接口返回值解析
查看>>
iOS解决NSTimer引用问题
查看>>
Event loop笔记
查看>>
基本包装类型
查看>>
js定时器的3种方式
查看>>
JavaConfig方式以及处理自动装配的歧义性_spring基础学习
查看>>
RN学习(三)——CodePush打包及效果展示
查看>>
gson的使用细节
查看>>