首页 > 其他分享 >CF1886B Fear of the Dark 题解

CF1886B Fear of the Dark 题解

时间:2023-10-13 13:23:57浏览次数:38  
标签:ch 题解 Px Py mid ret Dark double Fear

Question

Monocarp 在一个二维平面上,他的初始点在 \(O=(0,0)\) ,他需要到 \(P(P_x,P_y)\)

不幸的是,他能走的范围在两个圆内,我们给出了两个圆的坐标 \(A=(A_x,A_y)\) ,\(B=(B_x,B_y)\) 两个圆的半径相同,我们需要找到最小的半径让 Monocarp 能同 \(O\) 走到 \(P\)

image.png

Solution

这题可以二分+check,但是好像会被卡精度

其实,这题分类讨论就好了

  • 只经过一个圆

  • 经过两个圆,需要两个圆相交

Code

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
int T;
double Px,Py,Ax,Ay,Bx,By;
bool check_C_P(double x,double y,double R,double Px,double Py){
    return (Px-x)*(Px-x)+(Py-y)*(Py-y)<R*R;
}
bool check_C_C(double Ax,double Ay,double Bx,double By,double R){
    return (Ax-Bx)*(Ax-Bx)+(Ay-By)*(Ay-By)<(R*2)*(R*2);
}
bool check(double R){
    if(check_C_P(Ax,Ay,R,0,0)&&check_C_P(Ax,Ay,R,Px,Py)) return 1;
    if(check_C_P(Bx,By,R,0,0)&&check_C_P(Bx,By,R,Px,Py)) return 1;
    if(check_C_C(Ax,Ay,Bx,By,R)){
        if(check_C_P(Ax,Ay,R,0,0)&&check_C_P(Bx,By,R,Px,Py)) return 1;
        if(check_C_P(Bx,By,R,0,0)&&check_C_P(Bx,Ay,R,Px,Py)) return 1;
    }
    return 0;
}
int main(){
    // freopen("B.in","r",stdin);
    // freopen("B.out","w",stdout);
    T=read();
    while(T--){
        Px=read(),Py=read(),Ax=read(),Ay=read(),Bx=read(),By=read();
        double L=0,R=5e3,ans=R,mid;
        while(abs(R-L)>1e-9){
            mid=(R+L)/2;
            if(check(mid)){
                ans=min(ans,mid);R=mid;
            }
            else L=mid;
        }
        printf("%.9lf\n",ans);
    }
    return 0;
}

Summary

  1. 这题具体实现的时候可以使用结构体/类的思想,把一个圆想成一个类,判断的时候不用写两遍了

标签:ch,题解,Px,Py,mid,ret,Dark,double,Fear
From: https://www.cnblogs.com/martian148/p/17761860.html

相关文章

  • 网络规划设计师真题解析--TCP慢启动拥塞避免机制取值问题
    若TCP最大段长为1000字节,在建立连接后慢启动,第1轮次发送了1个段并收到了应答,应答报文中window字段为5000字节,此时还能发送(25)字节。(2019年)(25)A.1000    B.2000     C.3000     D.5000答案:B解析:假如TCP最大段长为1000字节,在建立连接后慢启动第1轮发送了1个段......
  • [APIO2019] 路灯 题解
    LG5445把询问\(x,y\)看作平面上的点记当前时刻\(t\),\(l\)是与\(i\)连通的最左端,\(r\)是与\(i+1\)连通的最右端,可以通过set维护断边找到连边\((i,i+1)\)时\(x\in[l,i],y\in[i+1,r]\)连通了,考虑贡献提前计算,矩形\(+(q-t)\)。断边时同理\(-(q-t)\)剩下的问题是......
  • CF963B Destruction of a Tree 题解
    CF963BDestructionofaTree题解  洛谷题目链接  这里提供一个较为朴素的DP想法。题意简述  给定一棵树,节点个数不超过\(2\times10^5\),每次可以删掉度数为偶数的点。问最后能不能删完;能删完给出删除方案。思路分析  首先可以随便选一个点作为根。  其次,......
  • ABC214H Collecting 题解
    前言这是一道比较神仙的题目,其后半部分的建图是比较困难想到的,前半部分还是较为容易的。题意现在有一张\(N\)个点\(M\)条边的有向图,每个点有一个点权\(a_i\),现在要找出\(K\)条路径,使得这些路径的并集的点权和尽量大。现在求出点权和。\(N,M\le2\times10^5,k\le10\)题......
  • POD 题解
    考虑每种颜色都只在一条链上出现这个限制。考虑使用随机化\(\text{hash}\),我们对每个点随机一个权值,使得每种颜色所有点异或值为\(0\)。这样一种颜色如果只在一条链上,那对两条链\(\text{hash}\)异或值的贡献就是\(0\),否则就是两个随机值。这样如果存在一个颜色存在于两条......
  • CF938F Erasing Substrings 题解
    ErasingSubstrings一个神奇的想法是设\(f_{i,j}\)表示在位置\([1,i]\)中,我们删去了长度为\(2^k(k\inj)\)的一些串,所能得到的最小字典序。使用二分加哈希可以做到\(O(n^2\log^2n)\),无法承受。发现对于状态\(f_{i,j}\),它已经确定了\(i-j\)位的串,因为所有\(\inj\)......
  • [AGC030F] Permutation and Minimum 题解
    PermutationandMinimum看到300的数据范围,再加上计数题,很容易就往计数DP方向去想。为方便,我们将\(n\)乘二。因为是两个位置取\(\min\),于是我们便想到从小往大把每个数填入序列。于是DP数组第一维的意义便出来了:当前已经填入了前\(i\)小个数。考虑当前填入一个数。这......
  • 洛谷P3576 [POI2014] MRO-Ant colony 题解
    MRO-Antcolony根据下取整除法的性质\((\left\lfloor\dfrac{\left\lfloor\dfrac{x}{y}\right\rfloor}{z}\right\rfloor=\left\lfloor\dfrac{x}{yz}\right\rfloor)\),我们可以反向考虑,即从特殊边开始,计算出从每个叶子到特殊边的路径上,要除以的那个分母是什么。这个可以直接一遍df......
  • 洛谷P3713 [BJOI2017] 机动训练 题解
    机动训练这题的瓶颈,在于把\(a_i^2\)看作\(\sum\limits_{i=1}^{a_i}\sum\limits_{j=1}^{a_i}1\),然后我们就可以看成“两两相同的机动路径都能贡献1”。于是我们设\(f_{x1,y1,x2,y2}\)表示两条起点为\((x1,y1)\)和\((x2,y2)\)的相同路径的数量,然后分别枚举两条路径的方向......
  • [AGC013E] Placing Squares 题解
    PlacingSquares关键是将问题从抽象的“正方形面积”转为具象的形式:一段长度为\(d\)的区间,有两个不同的小球要放进去,则总放置方案就是\(d^2\),且不同的区间间方案是通过乘法原理结合的,刚好是题目中\(\prodd^2\)的形式。于是我们可以设计DP:设\(f_{i,j}\)表示前\(i\)个......