zoukankan      html  css  js  c++  java
  • C. Nearest vectors--cf598C(极角排序)

    http://codeforces.com/problemset/problem/598/C

    题目大意: 给你你个向量  向量的起点都是从(0,0)开始的   求哪个角最小  输出这两个向量

    这是第一次接触极角  

    一个函数图像上某一点到原点的距离就是极径,极径与x轴的夹角就是极角

    按照极角排序   是从第三象限的最右边的开始是最小  一直逆时针转到第二象限的最右边

    求极角差最小就行了

    但是卡精度问题  把double换成long double   就好了  (我也不知道为什么)

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    #include<iostream>
    #define INF 0x3f3f3f3f3
    
    using namespace std;
    
    struct node{int x,y,j; long double k;}a[101000];
    
    int cmp(node c,node d)
    {
        return c.k<d.k;
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d %d",&a[i].x,&a[i].y);
                a[i].k=atan2(a[i].y,a[i].x);
                a[i].j=i;
            }
            sort(a+1,a+1+n,cmp);
            a[0].k=a[n].k;
            a[0].j=a[n].j;
    
            int xx=0,yy=0;
            long double Min=INF;
            for(int i=1;i<=n;i++)
            {
                long double jiao=a[i].k-a[i-1].k;
                if(jiao<0) jiao+=acos(-1.0)*2;
                if(jiao<Min)
                {
                    Min=jiao;
                    xx=a[i].j;
                    yy=a[i-1].j;
                }
            }
            printf("%d %d
    ",xx,yy);
        }
        return 0;
    }
  • 相关阅读:
    Vue单向数据流
    npm常用命令
    vue自定义指令
    slot的用法(Vue插槽)
    js闭包
    canvas 给画的多边形着色
    canvas画线
    canvas初体验
    canvas
    json
  • 原文地址:https://www.cnblogs.com/linliu/p/5450697.html
Copyright © 2011-2022 走看看