码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #421 (Div. 2)B Mister B and Angle in Polygon

时间:2017-06-28 10:54:38      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:ons   splay   技术   ade   span   scanf   double   大小   mis   

题目: 这里

题意:给一个正n(n <= 100000)边形和一个角度a,在正n边形n找到3个不同的顶点v1,v2,v3,使得 技术分享a之间的差最小,并且输出v1,v2,v3;

思路:可以把这个多边形放在一个圆里面。发现技术分享的大小等于v1,v3对应圆心角/2。所有的角都是180/a的倍数。固定一个点的位置1,然后以2为圆心角的起点为n-1的终点枚举另一个点的位置即可。

代码:

技术分享
//
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int main()
{
    int v1 , v2;
    double a;int n;
    scanf("%d%lf",&n,&a);
    double ang = 180.0/(double)n;
    double minn = 188.0;
    double ans = 0;
    for(int i = 2; i <= n - 1;i++)
    {
        if(minn > fabs(ang * (i-1) - a))
        {
           minn = fabs(ang * (i - 1) - a);
           v1 = i;
           v2 = i + 1;
        }
    }
    printf("1 %d %d\n",v2,v1);
}
View Code

 

Codeforces Round #421 (Div. 2)B Mister B and Angle in Polygon

标签:ons   splay   技术   ade   span   scanf   double   大小   mis   

原文地址:http://www.cnblogs.com/rtyfcvb/p/7088363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!