首页 > 其他分享 >题解:[SNCPC2019] Pick Up

题解:[SNCPC2019] Pick Up

时间:2024-10-16 12:00:18浏览次数:1  
标签:题解 商场 Up long Pick SNCPC2019 ans2 接甲

Problem Link

[SNCPC2019] Pick Up

题意

给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。

Solution

分类讨论。

思考乙是否要去接甲。这个很简单,令 \(ans1\) 为甲自己出发耗时,\(ans2\) 为乙接甲耗时,两者取最小值即可。

\(ans1\) 很好算,那么 \(ans2\) 呢?

直接思考三个点比较困难,考虑把甲乙放在一起(也就是以两点建矩形),设该矩形内或矩形上有一点 \(P\) 距离商场最近。

1.甲先到 \(P\) 点。那么乙自然越快到商场越好,那么 \(ans2\) 为乙到商场的时间。

2.乙先到 \(P\) 点。显然让乙去接甲,同时让甲直接冲向 \(P\),乙去拦住甲并接上甲。

Code

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double lb;
#define fo(i, l, r) for (int i = l; i <= r; ++i)
#define fr(i, r, l) for (int i = l; i >= r; --i)
// #define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
// char buf[1<<21], *p1 = buf, *p2 = buf;
inline int read(int x=0, bool f=0, char c=getchar()) {for(;!isdigit(c);c=getchar()) f^=!(c^45);for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);return f?-x:x;}
inline ll lread(ll x=0, bool f=0, char c=getchar()) {for(;!isdigit(c);c=getchar()) f^=!(c^45);for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);return f?-x:x;}
// void train() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);}

int a, b, x_a, y_a, x_b, y_b, x_c, y_c, l, r, d, u, x, y;
ll dis_1, dis_2;

ll Distance(int a, int b, int c, int d) { return 0ll + abs(a-c) + abs(b-d); }

lb Time(int a, int b, int c, int d, int v) {return (Distance(a, b, c, d) * 1.0) / (v * 1.0);}

lb ans1, ans2;

int main()
{
    int _ = read();
    while( _-- )
    {
        a = read(), b = read(), x_a = read(), y_a = read(), x_b = read(), y_b = read(), x_c = read(), y_c = read();
        ans1 = Time(x_a, y_a, x_c, y_c, a), l = min(x_a, x_b), r = x_a + x_b - l, d = min(y_a, y_b), u = y_a + y_b - d;
        x = max(l, min(r, x_c)), y = max(d, min(u, y_c));
        if( Time(x_a, y_a, x, y, a) < Time(x_b, y_b, x, y, b) ) ans2 = Time(x_b, y_b, x_c, y_c, b);
        else
        {
            lb dist = Distance(x_a, y_a, x_c, y_c) - (1.0 * a) * Time(x_a, y_a, x_b, y_b, a + b);
            ans2 = Time(x_a, y_a, x_b, y_b, a + b) + dist / b;
        }
        printf("%.7Lf\n", min(ans1, ans2));
    }
    return 0;
}

Tips

记得保留至少 \(7\) 位小数。

标签:题解,商场,Up,long,Pick,SNCPC2019,ans2,接甲
From: https://www.cnblogs.com/naughty-naught/p/18469592

相关文章

  • P3794 签到题IV 题解
    题目传送门前置知识最大公约数解法\(\gcd\)和\(\operatorname{or}\)在固定左端点的情况下至多会变化\(O(\logV)\)次。以\(\gcd\)为例,考虑求出所有的四元组\((l,r,x,val)\)表示\(\foralli\in[l,r],\gcd\limits_{j=i}^{x}\{a_{j}\}=val\)。本题中因为\(x\)......
  • CF1458D Flip and Reverse 题解
    思路由于它要求\(\text{01}\)数量相等,我们可以考虑站在前缀和的角度看待这个问题。我们将\(0\)看作负一,\(1\)看作一。可以把它化成一个折线图(方便观察)。观察一下它的操作实际上在干什么。容易发现,在折线图上,我们把操作的\([l,r]\)的整段折线reverse了一遍。同样的,......
  • 33. 外键约束、过滤条件where、group by
    1.外键1.1概念[1]外键主表:被引用的表。从表:包含外键的表,该外键引用主表中的主键。主键:表中的唯一标识符,用于唯一标识表中的每一行。外键:从表中的一列或多列,其值必须与主表中的主键值匹配。[1]外键约束外键约束是一种数据库完整性规则,用于维护两个相关表之间的链接,并确保......
  • swsupport.dll 缺失:修复指南
    swsupport.dll文件通常与某些特定的软件或硬件驱动程序相关,尤其是在涉及系统支持和维护功能时。这个文件可能负责处理软件的某些辅助功能,例如更新、诊断或配置等。当您看到“swsupport.dll缺失”的提示时,说明您的系统或某个应用程序缺少了这个文件,这可能会导致相关软件无法正......
  • [题解]CF1136E Nastya Hasn't Written a Legend
    思路首先考虑操作1一个点\(i\)能被操作到的条件。注意到此时\(x\simi-1\)这些位置都是被更新过的,再仔细观察此时\(\forallj\in[x,i),a_j=a_x+\sum_{p=x}^{j-1}k_p\)。那么对于\(a_i\)如果会被修改将会变为\(a_x+\sum_{p=x}^{i-1}k_p\),那么\(a_i......
  • [ABC213G] Connectivity 2 题解
    T3[ABC213G]Connectivity2题意:给定一张无向图\(G\),将其删去\(0\) 条及以上的边构成一张新图,求对于所有点\(k\in(1,n]\),使\(k\) 与\(1\) 连通的新图的个数。比较套路的一道状压DP。尽管刚开始思考毫无头绪。Step1.令\(f_S\)表示点集为\(S\)的连通子图的个数,\(......
  • [TJOI2018] 游园会 题解
    T7[TJOI2018]游园会只能说是道有意思的好题。一般来说遇到这种题我们想到的都会是设\(f_{i,\dots}\)表示长度为\(i\),然后后面跟一堆状态的情况。此题需要我们满足两个条件:LCS的长度;不能出现\(\texttt{NOI}\)的子串。第二个限制我们可以通过状态设计来解决,但第一个......
  • [JSOI2018] 潜入行动 题解
    T6[JSOI2018]潜入行动很套路、很裸的一道树形DP。看了状态就会推方程的那种。设\(f_{u,i,0/1,0/1}\)表示以\(u\)为根的子树中有\(i\)个监听器、\(u\)有没有监听器、\(u\)有没有被监听的方案数。显然要枚举子节点\(v\)、\(u\)的监听器数量\(i\)、\(v\)的监听器数......
  • [ABC213G] Connectivity 2 题解
    [ABC213G]Connectivity2题解套路的经典图上计数题。考虑枚举和\(1\)相连的子集\(S\)。答案显然由两部分构成,\(S\)集合和\(1\)相连的方案数\(f(S)\)和\(S\)对于\(G\)的补集所有的方案数\(g(S)\)。答案就是二者相乘。显然\(g\)更好处理。直接枚举集合的边即可......
  • P8386 [PA2021] Od deski do desk 题解
    P8386[PA2021]Oddeskidodesk题解考虑一个大的序列一定被分成几个区间来删除。朴素的dp定义是\(dp_{i,j}\)表示前\(i\)个数,最后一个数元素是\(j\)的方案数。然而这样不仅不好转移,而且设不下状态。不难发现所有值是等价的。考虑这样一个事情:若我们要分出一个新的区......