En tercer lugar (minimización del valor máximo)

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

El significado de problemas: hay N base de entrenamiento, las coordenadas xi, yi (-10000 <= x, y <= 10.000), el eje X para construir un valor máximo de mínimo lugar Shidao toda la base de formación. Encontrar el valor.

Solución: La respuesta es una función clara de solo valle, cerca de un tercio de la respuesta.

// # incluir <bits / STDC ++. h> 
#include <cstdio> 
#include <cstring> 
#include <cmath> 
#include <algoritmo> 
#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <cola> 
#include <pila> 
#include <mapa> 
#include <set> 
#include <string.h> 
#include <vector> 
typedef largo largo ll; 
#define int ll 
#define mod 1000000007 
#define gcd __gcd 
#define rep (i, j, n) for (int i = j; i <= n; i ++) 
#define rojo (i, n, j) for (int i = n; i> = j; i--) 
#define mE (x, y memset) (x, y, sizeof (x)) 
// ll lcm (ll a,
// ll quickpow (ll a, ll b) {ll ans = 1, mientras que (b) {if (b & 1) ans = ans * a mod%; b >> = 1, a = a * a mod%;} return ans;} 
// int euler1 (int x) {int ans = x; for (int i = 2; i * i <= x; i ++) si (x% i == 0) {Respuesta-= ans / i; mientras que (x% i == 0) x / = i;} if (x> 1) Respuesta-= American National Standard / x; ans de retorno;} 
// const int N = 1E7 + 9; int VIS [n], el primer [n], phi [N]; int euler2 (int n) {ME (vis, true); int len = 1; rep (i, 2, n) {if (vis [i] ) {prime [len ++] = i, phi [i] = i-1;} for (int j = 1; j <len && prime [j] * i <= n; j ++) {vis [i * prime [j]] = 0; si (% prime i [j] == 0) {phi [i * prime [j]] = phi [i] * prime [j]; break;} else {phi [i * prime [j]] = phi [i] * phi [prime [j]];}}} len retorno} 
#define INF 0x3f3f3f3f 
#define acos PI (-1) 
#define pii par <int, int> 
#define fi primera 
#define SE segundo 
# definir LSON l, mediados, raíz << 1 
#define rson mediados + 1, r, raíz <<
#define mp make_pair 
#define cin (x) scanf ( "% LLD", y x); 
using namespace std; 
int const N = 1E7 + 9; 
const int maxN = 1e5 + 9; 
const doble esp = 1e-6; 
Pii un [maxN]; 
int n; 

doble cal (doble x) { 
    doble ans = -INF; 
    rep (i, 1, n) { 
        ans = max (ans, sqrt ((a [i] .fi-x) * (a [i] .fi-x) + a [i] .es * a [i] .es)); 
    } 
    Ans regresar; 
} 

Anular solve () { 
    cin >> n; 
    rep (i, 1, n) { 
        cin >> a [i] .fi >> a [i] .es; 
    } 
    Doble l = -1e4, r = 1E4; 
    mientras que (r - l> = esp) { 
        doble rmid = r - (r - l) / 3, LMID = l + (r - l) / 3;
        si (cal (rmid)> = cal (LMID)) { 
            r = rmid; 
        } else { 
            l = LMID; 
        } 
    } 
    Printf ( "% 4LF. \ N", cal (r)); 
} 

Firmados main () 
{ 
    ios :: sync_with_stdio (false); 
    //cin.tie(0); cout.tie (0); 
    // int t; 
    // cin (t); 
    // tiempo (t -) { 
        solve (); 
    //} 
}

 

Supongo que te gusta

Origin www.cnblogs.com/nonames/p/12466859.html
Recomendado
Clasificación