C. Polygon for the Angle(几何)

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

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

 

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

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

AC代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define mod 998244353
 5 const int maxn = 200+100;
 6 struct node
 7 {
 8     double minn;
 9     double maxx;
10 } q[maxn];
11 int main()
12 {
13     int T;
14     for(int i=3; i<=360; i++)
15     {
16         q[i].maxx=180.0-360.0/(i*1.0);
17         q[i].minn=q[i].maxx/((i-2)*1.0);
18         //  cout<<i<<" "<<q[i].maxx<<" "<<q[i].minn<<endl;
19     }
20     scanf("%d",&T);
21     while(T--)
22     {
23         int ans=0;
24         double  tmp;
25         scanf("%lf",&tmp);
26         for(int i=2; i<=360; i++)
27         {
28             if(q[i].minn<=tmp&&q[i].maxx>=tmp)
29             {
30                 int t=tmp/q[i].minn;
31              //   cout<<i<<" "<<t<<endl;
32                 if(fabs(t-tmp/q[i].minn)<=1e-6)
33                 {
34                     ans=i;
35                     break;
36                 }
37             }
38         }
39         printf("%d\n",ans);
40     }
41     return 0;
42 }
43  

 

posted @ 2018-12-29 15:50  Let_Life_Stop  阅读(244)  评论(0编辑  收藏  举报