hdu 6127 Hard challenge

来源:互联网 发布:每日销售数据统计表 编辑:程序博客网 时间:2024/06/02 18:11

Hard challenge

题目链接:Hard challenge

官方题解:
这里写图片描述

按照极角从小到大排序,从y轴开始逆时针扫一圈即可

代码:

#include<bits/stdc++.h>using namespace std;typedef long long LL;const double PI=acos(-1.0);const int maxn=5e4+10;struct point{    int x,y,val;    double angle;    bool operator < (const point&A)const    {        return angle<A.angle;    }} p[maxn];int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0; i<n; ++i)        {            scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].val);            if(p[i].x==0)                p[i].angle=PI/2.0;            else                p[i].angle=atan(p[i].y*1.0/p[i].x);        }        sort(p,p+n);        LL ls=0,rs=0;        for(int i=0; i<n; ++i)        {            if(p[i].x<0)                ls+=p[i].val;            else if(p[i].x>0)                rs+=p[i].val;            else if(p[i].y>0)                ls+=p[i].val;            else                rs+=p[i].val;        }        LL ans=ls*rs;        for(int i=0; i<n; ++i)        {            if(p[i].x<0)                ls-=p[i].val,rs+=p[i].val;            else if(p[i].x>0)                rs-=p[i].val,ls+=p[i].val;            else if(p[i].y>0)                ls-=p[i].val,rs+=p[i].val;            else                rs-=p[i].val,ls+=p[i].val;            ans=max(ans,ls*rs);        }        printf("%lld\n",ans);    }    return 0;}



ps:想了多种,但还是这种扫法最简单,纯粹是套路。。

原创粉丝点击