CF-1096C Polygon for the Angle

Posted 1625--h

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF-1096C Polygon for the Angle相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

CF1096E The Top Scorer

CF1096E The Top Scorer

CF1096E The Top Scorer 组合数 容斥

CF1096D Easy Problem [dp]

Polygon for the Angle 1096C(圆心角与圆周角)

CF1096.F. Inversion Expectation(树状数组)