欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C. Polygon for the Angle(几何)

程序员文章站 2022-03-30 08:26:34
...

题目链接:http://codeforces.com/contest/1096/problem/C

题目大意:T是测试样例,然后每一次输入一个角度,然后问你在一个n边形里面,能不能构成这个角度,如果能,输出边数,如果没有就输出-1.

 

具体思路:利用一个性质,四边形内的每个点都能被这个四边形内的最小的角度表示出来,也就是倍数关系。

然后我们打表就可以发现,最多是到179度多,这个时候的边数是360条边,这样的话,我们就直接打表,从3-360条边打表,然后循环就可以了。

AC代码:

#include <bits/stdc++.h>
using namespace std;
# define ll long long
# define mod 998244353
const int maxn = 200+100;
struct node
{
    double minn;
    double maxx;
} q[maxn];
int main()
{
    int T;
    for(int i=3; i<=360; i++)
    {
        q[i].maxx=180.0-360.0/(i*1.0);
        q[i].minn=q[i].maxx/((i-2)*1.0);
        //  cout<<i<<" "<<q[i].maxx<<" "<<q[i].minn<<endl;
    }
    scanf("%d",&T);
    while(T--)
    {
        int ans=0;
        double  tmp;
        scanf("%lf",&tmp);
        for(int i=2; i<=360; i++)
        {
            if(q[i].minn<=tmp&&q[i].maxx>=tmp)
            {
                int t=tmp/q[i].minn;
             //   cout<<i<<" "<<t<<endl;
                if(fabs(t-tmp/q[i].minn)<=1e-6)
                {
                    ans=i;
                    break;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}