题解: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) 收藏 举报
浙公网安备 33010602011771号