En la antigua ciudad de Mindray, de pie alto con Dios n bloque de piedra. Discutir ancianos, seleccione tres Jinseki encierra un altar. Debido a que la intensidad de la energía y su área altar inversamente proporcional al área de altar lo más pequeño posible.
En particular, si hay dos mismas coordenadas Jinseki, o tres Jinseki colineales, la zona del altar 0.000
.
Los ancianos encontraron que el problema no es tan simple, tan Confíe su programa para resolver este problema.
Formatos de entrada:
En la primera línea de la entrada se le da un número entero positivo N- (. 3 ≤ n- ≤ 5000). Entonces n líneas, cada línea tiene dos números enteros, respectivamente Jinseki abscisa y la ordenada ( -10 . 9 = <abscisa, ordenada <10 . 9 ).
Los formatos de salida:
El área mínima del altar de salida en una fila, redondeado a tres decimales.
de entrada de la muestra:
Resultado de muestra:
la interpretación de la muestra
salida del valor de la figura es igual al área del triángulo en el borde rojo o púrpura.
El significado de los problemas
N puntos para el triángulo mínimo.
solución del problema
Sobre el ángulo polar Ordenar: https://www.cnblogs.com/aiguona/p/7248311.html
Ordenar el uso ángulo más o menos polar:
Acerca del producto cruz: = 0 significa el producto cruzado de dos vectores paralelos a (coincidentes); producto cruzado> 0, el vector de un (hacia abajo en entenderse más o menos como en b) está en el sentido horario vector de dirección b; producto cruzado de <0, del vector en una dirección en sentido antihorario vector b (aproximadamente entendido como en b anteriormente en a)
Utilizamos el producto pase de ángulos polares de pequeño a grande. Por lo tanto puede dar un cierto punto en un plano dado, que están dispuestos de acuerdo con un punto central seleccionado hacia delante (inversa) en sentido horario.
En primer lugar a través de cada punto, como su punto central, y los otros puntos hasta n-1 vectores, estos vectores son entonces según las agujas del reloj o en sentido contrario de acuerdo con la idea de un ángulo polar tipo, a continuación, la multiplicación con un tenedor con dos adyacentes vector de encontrar la zona, se puede actualizar el mínimo.
1 #include <. Bits / STDC ++ h> 2 const int INF = 0x3f3f3f3f ; 3 typedef largo tiempo LL; 4 const dobles eps = 1E- 8 ; 5 const int mod = 1e9 + 7 ; 6 const int maxN = 1e5 + 10 ; 7 usando espacio de nombres std; 8 9 struct nodo 10 { 11 LL x, y; 12 } P [ 5005 ], C [ 5005]; // punto de depósito P, C memoria vector 13 es 14 BOOL CMP (Nodo A, el Nodo B) // vector ordenada en sentido horario 15 { 16 retorno AX * BX por-AY *> 0 ; . 17 } 18 es . 19 int principal ( ) 20 es { 21 es #ifdef el DEBUG 22 es la freopen ( " sample.txt " , " R & lt " , stdin); 23 es #endif 24 25 int n-; 26 es Scanf ( " % D " , y n-); 27 para ( int i = 1 ; i <= n; i ++ ) 28 scanf ( " % LLD% LLD " , y P [i] .x, y P [i] .y); 29 LL ans = 0x3f3f3f3f3f3f3f3f ; 30 para ( int i = 1 ; i <= n; i ++ ) 31 { 32 int cnt = 0 ; 33 para ( int j = 1 ; j <= n; j ++ ) 34 { 35 si (! I = j) 36 { 37 C [++ cnt] .x = P [j] .x- P [i] .x; 38 C [cnt] .y = P [j] .y- P [i] .y; 39 } 40 } 41 sort (C + 1 , C + cnt + 1 , cmp); 42 para ( int j = 2 ; j <= cnt; j ++ ) 43 ans = min (ans, abs (C [j] .y * C [j- 1 ] .x - C [j] .x * C [j - 1 ] .y)); 44 } 45 printf ( " % .3f \ n " , ans * 1,0 / 2 ); 46 47 de retorno 0 ; 48 }
-