problemas de geometría computacional


CodeForces1096 C. Polygon para el ángulo

Significado de las preguntas:

Teniendo en cuenta un ángulo La
salida requiere un mínimo de n, n-gon satisfecho, es posible seleccionar tres vértices, las líneas de vértice de las tres esquinas ángulo formado igual que, si no hay salida es -1.
Si asegurar una solución, la solución no es más de 998.244.353
de datos Rango: 1 <= ángulo <180
Ejemplo:
54 grados, 10 pueden estar configurados gon
Aquí Insertar imagen Descripción

ideas:

Aquí Insertar imagen Descripción
Los amarillos tres esquinas del mismo ángulo, resultó ser:
primera circunferencia circunscrita sorteo es el ángulo circunferencial de las tres esquinas, el teorema de presencia: un ángulo circunferencial de que el número es igual a la mitad del número del arco de círculo correspondiente al ángulo centro de
polígono es positivo poligonal, arqueadas de manera que tres ángulos son de igual longitud, y por lo tanto el mismo centro ángulos de las tres esquinas del número, el mismo número de ángulo circunferencial

Obviamente ángulo mínimo amarillo es el ángulo del polígono puede ser construido, y
se puede encontrar: el tiempo que el múltiplo del ángulo mínimo, el ángulo máximo de no más que el polígono (ángulo es decir, interior), entonces el polígono puede ser construido
n-gon interior fórmula ángulo : 180 (n-2) / n
de cálculo del ángulo mínimo : cálculo de ángulo primera central correspondiente al ángulo mínimo, a continuación, dividiendo por 2, y fácil de derivar el ángulo interno del ángulo central = 180,
puede ser empujado de manera que: n-2 se encontró más pequeña ángulo puede estar compuesta de un ángulo interior, el ángulo interior mínimo = ángulo / (n-2), en conjunto con ángulos interiores fórmula encontrar el ángulo mínimo = 180 / n

Trate mayor lista de resultados n es el número, y luego juzgar por sí mismos si la violencia.
N = 360 encontrar jugando mesa cuando el ángulo puede ser de 1 a 179 All representado.
Así, el pre n = 3 a n = 360 se puede construir de todos los ángulos y la mesa de juego para cada O interrogación (1) a la salida

código:

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
map<int,int>mark;
signed main(){
    for(int i=3;;i++){
        double mi=180.0/i;//记得用180.0而不是180
        for(int j=1;j<=i-2;j++){
            double t=mi*j;
            int tt=(int)t;
            if(t-tt<=eps&&!mark[tt]){
                mark[tt]=i;
            }
        }
        if(mark.size()==179){
            break;
        }
    }
    int T;
    cin>>T;
    while(T--){
        int angle;
        cin>>angle;
        cout<<mark[angle]<<endl;
    }
    return 0;
}

Publicados 430 artículos originales · ganado elogios 36 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44178736/article/details/104811067
Recomendado
Clasificación