题解:CF1096C Polygon for the Angle

闲话

本文同步发布在 cnblogs


观察到角度最多只有 \(360\) 度,可以预处理。

外层循环 \(3 \sim 360\),计算答案。

正多边形可以构造外接圆,圆心角即为 \(\frac{360}{i}\),根据圆周角定理,圆周角是圆心角的一半,即 \(\frac{180}{i}\)

内层循环 \(A\)\(C\) 距离点数即可,注意只能枚举到 \(n - 2\),距离为 \(j\),角度显然为 \(j \times \frac{180}{i}\)

#include<bits/stdc++.h>
using namespace std;
int t, n, ans[185];
//ans[i] 代表正 i 边形的答案
int main(){
    cin >> t;
    for(int i = 3; i <= 360; i ++){
        for(int j = 1; j <= i - 2; j ++){
            if(180 * j % i == 0 && !ans[180 * j / i]) ans[180 * j / i] = i;
//          须整除                 没有计算过         首次答案显然最优
        }
    }
    while(t --){
        cin >> n;
        if(ans[n]) cout << ans[n] << "\n";
        else cout << "-1\n";//无解
    }
    return 0;
}

posted on 2025-01-12 11:59  zhangzirui66  阅读(32)  评论(0)    收藏  举报

导航