View Angle CodeForces - 257C

博客指出用atan2极角排序的思路错误,本题正确思路是枚举白色区域,即相邻两点中间无点的区域,通过逆向求解得出结果,同时要注意最后一个点和第一个点的夹角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先想到的用atan2极角排序是错的,这题的思路是枚举白色区域,白色区域就是没有点的地方,就是相邻两个点中间的区域,然后逆向求解,注意最后一个点和第一个点的夹角

#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>

using namespace std;

const int maxn=111111;
const double PI=acos(-1.0);

struct Point
{
    double x,y;
    double at1;
    Point(){}
    Point(double _x,double _y)
    {
        x=_x;
        y=_y;
    }
};

Point p[maxn];

bool cmp(Point a,Point b)
{
    return a.at1<b.at1;
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        scanf("%lf %lf",&p[i].x,&p[i].y);
        p[i].at1=atan2(p[i].y,p[i].x);
    }
    sort(p,p+n,cmp);
    double ans=2*PI;
    p[n].at1=p[0].at1+2*PI;
    for(int i=0;i<n;i++)
    {
        double t=2*PI-fabs(p[i].at1-p[i+1].at1);
        ans=min(ans,t);
    }
    printf("%.10lf\n",ans*180/PI);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值