2020 ganado fuera de la base algoritmo de entrenamiento de invierno campo de fósforo del equipo de 5 B a la carne de vacuno

https://ac.nowcoder.com/acm/contest/3006/B

título Descripción

Debido a que el clan de res coincide a menudo lejos, por lo que una gran parte del país para establecer las bases de entrenamiento, cada base tiene una coordenada (x,y).

Este fin de semana, el equipo de Tauro tiene que salir del partido, punto de partido en cada juego de Xeje. equipo de Tauro para la comodidad del juego, en busca de una base de entrenamiento para alcanzar las máximas y mínimas distancias como un lugar para la carrera.

El problema para el equipo Taurus demasiado simple, que depende de usted, usted lo ayude a contar ~

pensamiento

Escrito en la solución a un problema es un tercio, dos puntos también pueden escribir, yo estaba medio escrito, dijo que el siguiente es un pensamiento dicotómico.

La mitad de la distancia máxima más pequeña, el primer lugar en un determinado Xeje, para cada base de entrenamiento, si la distancia es el mismo lugar dist, el lugar debe estar en él para que el centro de un radio de distcírculo, que es redonda y eje Xdos intersecciones, dos minutos o menos cuando la distancia distes la legal, es decir, siempre que el espacio entre dos coordenadas válidos. Este registro se puede considerar el espacio de coordenadas, nos preguntamos por más base de entrenamiento de esta intersección rango de coordenadas, si la intersección no está vacía, entonces la distlegítima, si esto representa la intersección está vacía distno es factible. Debido a la demanda de la necesidad de la raíz cuadrada, y el juicio de valor especial por lo tanto necesitan sobre el número de la raíz es positiva, no positiva directa ilegal.

/*************************************************************************
    > File Name: B.cpp
    > Author: amoscykl
    > Mail: [email protected]
    > Created Time: 2020年02月13日 星期四 14时52分21秒
 ************************************************************************/
 
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = 0x3f3f3f3f;
int px[N], py[N];
int n;
#define eps 1e-8
bool check(double x){
    double xl, xr;
    double temp = x * x - py[1] * py[1] * 1.0;
    if (temp < 0)return false;
    temp = sqrt(temp);
    xl = px[1] * 1.0 - temp;
    xr = px[1] * 1.0 + temp;
    for (int i = 2; i <= n; i++){
        temp = x * x - py[i] * py[i] * 1.0;
        if (temp < 0)return false;
        temp = sqrt(temp);
        double txl = px[i] * 1.0 - temp;
        double txr = px[i] * 1.0 + temp;
        if (xl > txr || xr < txl){
            // 没有交集
            return false;
        }
        else{
            xl = max(xl, txl);
            xr = min(xr, txr);
        }
    }
    return true;
}
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++){
        scanf("%d %d", px + i, py + i);
    }
    double l = 0.0;
    double r = inf * 1.0;
    double res = -1;
    while (r - l > eps){
        double mid = (l + r) / 2.0;
        if (check(mid)){
            res = mid;
            r = mid;
        }
        else l = mid;
    }
    printf("%.6lf\n", res);
    return 0;
}

 

Publicados 204 artículos originales · elogios ganado 13 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43701790/article/details/104308735
Recomendado
Clasificación