题目链接

Problem Description

There are n points on the plane, and the ith points has a value vali, and its coordinate is (xi,yi). It is guaranteed that no two points have the same coordinate, and no two points makes the line which passes them also passes the origin point. For every two points, there is a segment connecting them, and the segment has a value which equals the product of the values of the two points. Now HazelFan want to draw a line throgh the origin point but not through any given points, and he define the score is the sum of the values of all segments that the line crosses. Please tell him the maximum score.

Input

The first line contains a positive integer T(1≤T≤5), denoting the number of test cases.

For each test case:

The first line contains a positive integer n(1≤n≤5×104).

The next n lines, the ith line contains three integers xi,yi,vali(|xi|,|yi|≤109,1≤vali≤104).

Output

For each test case:

A single line contains a nonnegative integer, denoting the answer.

Sample Input

2

2

1 1 1

1 -1 1

3

1 1 1

1 -1 10

-1 0 100

Sample Output

1

1100

题目描述:

平面上有(n)个点,已知每个点的坐标为((x,y)),以及改点的权值为(val),任意两点之间可以连接成一条不经过原点的边,该边的权值是两个端点的权值的乘积。现在要求画一条经过原点的直线,定义这条直线的权值为这条直线穿过的所有线段的值的和,问权值的最大值。

分析:

对于一条经过原点的直线,一定是把这(n)个点分为了左右两部分,只有连接左右两侧的线段才会对答案有贡献,又因为任意两点之间都有连线,整理后最后的权值就是直线一侧的点的和与另一侧点的和的乘积。现在问题就转化为找到一个最优的划分,使得两侧和的乘积最大。

将n个点按与原点的极角排序,只考虑(180)度的范围,因此按正切值从负无穷到正无穷排序。初始时分界线为(y)轴,横坐标小于(0)的为一部分,横坐标大于(0)的为另一部分,初始答案为这两部分的乘积。按排好的序依次处理每个点,相当于这条分界线在按逆时针转动,如果遇到一个横坐标为正的点,就把它扔到左侧,如果遇到横坐标为负的点,就扔到右侧,每次更新答案,遍历一遍后得到最大得分。

代码:

#include<cmath>
#include<cstdio>
#include<algorithm>
typedef long long ll;
using namespace std;
#define eps 1e-9
#define maxn 200005
struct Node
{
double x,y,ang;///横纵坐标,极角
int v;///权值
} p[maxn]; bool cmp(Node a,Node b)///结构体按照极角从小到大排序
{
return a.ang<b.ang;
}
int n,T;
ll sumL,sumR,ans;
void work()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%lf%lf%d",&p[i].x,&p[i].y,&p[i].v);
p[i].ang=atan(p[i].y/p[i].x);
}
sort(p+1,p+n+1,cmp);
sumL=sumR=ans=0;
for(int i=1; i<=n; i++)
if (p[i].x>eps)sumL+=p[i].v;
else sumR+=p[i].v;
ans=sumL*sumR;
for(int i=1; i<=n; i++)
{
if (p[i].x>0)sumL-=p[i].v,sumR+=p[i].v;
else sumL+=p[i].v,sumR-=p[i].v;
ans=max(ans,sumL*sumR);
}
printf("%lld\n",ans);
}
int main()
{
scanf("%d",&T);
while (T--)
work();
return 0;
}

2017ACM暑期多校联合训练 - Team 7 1008 HDU 6127 Hard challenge (极角排序)的更多相关文章

  1. 2017ACM暑期多校联合训练 - Team 8 1008 HDU 6140 Hybrid Crystals (模拟)

    题目链接 Problem Description Kyber crystals, also called the living crystal or simply the kyber, and kno ...

  2. 2017ACM暑期多校联合训练 - Team 6 1008 HDU 6103 Kirinriki (模拟 尺取法)

    题目链接 Problem Description We define the distance of two strings A and B with same length n is disA,B= ...

  3. 2017ACM暑期多校联合训练 - Team 2 1008 HDU 6052 To my boyfriend (数学 模拟)

    题目链接 Problem Description Dear Liao I never forget the moment I met with you. You carefully asked me: ...

  4. 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)

    题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...

  5. 2017ACM暑期多校联合训练 - Team 9 1005 HDU 6165 FFF at Valentine (dfs)

    题目链接 Problem Description At Valentine's eve, Shylock and Lucar were enjoying their time as any other ...

  6. 2017ACM暑期多校联合训练 - Team 9 1010 HDU 6170 Two strings (dp)

    题目链接 Problem Description Giving two strings and you should judge if they are matched. The first stri ...

  7. 2017ACM暑期多校联合训练 - Team 8 1006 HDU 6138 Fleet of the Eternal Throne (字符串处理 AC自动机)

    题目链接 Problem Description The Eternal Fleet was built many centuries ago before the time of Valkorion ...

  8. 2017ACM暑期多校联合训练 - Team 8 1002 HDU 6134 Battlestation Operational (数论 莫比乌斯反演)

    题目链接 Problem Description The Death Star, known officially as the DS-1 Orbital Battle Station, also k ...

  9. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

随机推荐

  1. 201621123037《Java程序设计》第二周学习总结

    #Week02-Java基本语法与类库 1. 本周学习总结 关键词:常量池.对象.null.不可变性.string对象拼接.字符串池 关键概念之间的联系:Java中有常量池,超出常量池以外的就会新开辟 ...

  2. Win10 版本情况 201810

  3. SpringMVC 应知应会

    springMVC 是表现层技术,可以用来代替 struts2,下面是简略图:主要是处理器和视图,只有这两个部分需要编写代码. springMVC 三大组件:处理器映射器,处理器适配器,视图解析器. ...

  4. Web前端面试宝典(最新)

    第一部分:HTML问答题   1.简述一下你对HTML语义化的理解? 用正确的标签做正确的事情. html语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析;即使在没有样式CSS情况下也 ...

  5. PHP 中数组获取不到元素

    早上看到 SO 上一个有关 PHP 的问题,提问者描述有一个数组,使用 print_r 可以看到索引 key 和相对应的 value 都是存在的,但是访问该元素,不管是使用 array[key] 还是 ...

  6. Codeforces Round#514 Div.2 翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  7. P3916 图的遍历

    题目描述 给出 NNN 个点, MMM 条边的有向图,对于每个点 vvv ,求 A(v)A(v)A(v) 表示从点 vvv 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 ...

  8. Debugging QML Applications

    Debugging QML Applications Console API Log console.log, console.debug, console.info, console.warn an ...

  9. Hive(二)hive的基本操作

    一.DDL操作(定义操作) 1.创建表 (1)建表语法结构 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type ...

  10. html5 video,audio控制播放多次,请求/监测全屏状态

    audio 播放  Element.play();  如果在播放中,调用play,从头播放,则需要先load,同时绑定结束方法,如 Element.addEventListener('ended',f ...