1. 程式人生 > >CF-1096C Polygon for the Angle

CF-1096C Polygon for the Angle

比例 等於 bits 發現 pro inf 一個 abc 滿足

CF-1096C Polygon for the Angle

https://codeforces.com/contest/1096/problem/C

技術分享圖片

題意:給一個角度ang(1<=ang<=180) 然後輸出如圖所示規則的最小正n邊形的邊數

分析:abc三點構成一個三角形,而三角形內角的比例就對應於它們各自對應的那段邊數比。如圖,54度對應三份,剩下的分別對應五份和兩份。

所以,對於任意一個角度ang,先求出g=gcd(ang,180),即每一邊可以對應多少度,然後 n=180/g 即為正n邊形的邊數,wait wait!是不是有點太快了,別忘了我們的前提條件,我們是用三角形內角比例等於對應邊數比得到的結論,我們要讓它滿足能夠組成三角形這一條件,所以發現當 ang/180==(n-1)/n

時(想一想為什麽是這樣),就無法組成三角形(因為只剩下一份了,不夠與ang組成三角形),這個時候只需將 n乘以2即可。

#include <bits/stdc++.h>
using namespace std;
int T,ang,n;
int main()
{
    cin>>T;
    while(T--)
    {
        cin >> ang;
        int n = 180/__gcd(ang,180);
        if(ang * n / 180 == n-1){
            n*=2;
        }
        cout << n << endl;
    }
}

CF-1096C Polygon for the Angle