Hard challenge(hdu6127)
来源:互联网 发布:林珊珊的淘宝店质量 编辑:程序博客网 时间:2024/06/07 17:55
题目:点击打开链接
题意:给出n个点,每个点有自己的权值,两点之间的连线的权值就是两个点的乘积,然后找到经过原点的一条直线,是其能通过的线的值最大,输出这能通过的最大值,
题解:先进行极角排序,然后逆时针加减计算,
#include <bits/stdc++.h>using namespace std;const double eps=1e-8;const double PI=acos(-1);typedef long long ll;int dcmp(double x){ if(fabs(x)<eps) return 0; else { if(x>0) return 1; else return -1; }}struct node{ double theta; double x,y,val; bool operator<(const node& rhs) const { return theta<rhs.theta; }}p[50005];//极角排序int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].val); if(p[i].x==0) p[i].theta=PI/2; else p[i].theta=atan(p[i].y/p[i].x); } sort(p+1,p+1+n); ll sumr=0,suml=0; for(int i =1;i<=n;i++) { if(dcmp(p[i].x)>=0) sumr+=p[i].val; else suml+=p[i].val; } ll ans=suml*sumr; for(int i=1;i<=n;i++) { if(p[i].x>=0) { sumr-=p[i].val; suml+=p[i].val; } else { sumr+=p[i].val; suml-=p[i].val; } ans=max(ans,sumr*suml); } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- Hard challenge(hdu6127)
- hdu6127 Hard challenge
- HDU6127-Hard challenge
- hdu6127 Hard challenge
- Hard challenge(HDU6127)
- HDU6127-Hard challenge
- HDU6127-Hard challenge
- HDU6127-Hard challenge
- HDU6127 Hard challenge【几何】
- HDU6127 Hard challenge[计算几何]
- Hdu6127 Hard challenge(2017多校第7场)
- HDU6127 Hard challenge 极角排序|暴力
- hdu6127-!!多校7&极角排序&问题转化-Hard challenge
- hdu6127 Hard challenge 2017多校第七场1008 计算几何 极角排序+双指针
- hard challenge
- Hard challenge
- HDU 6127 Hard challenge(几何)
- HDU 6127 Hard challenge(数学)
- PHP微信支付开发实例
- js中window.location.search的用法和作用。
- HDU 6158 The Designer(笛卡尔定理)
- 私有网段IP地址的划分
- koa-bodyparser返回413状态码的问题
- Hard challenge(hdu6127)
- k-means算法
- 【ARM-Linux开发】ARM嵌入式设备Linux系统启动步骤和方式
- Python3之socket网络编程
- Python学习笔记(一)三步走安装pip
- echarts彩虹图在js中的应用
- 僵尸进程问题排查方法
- Java设计模式之创建者模式
- js学习