2017 Multi-University Training Contest - Team 7 Hard challenge
2017-08-23 11:31
489 查看
http://acm.hdu.edu.cn/showproblem.php?pid=6127
题意:
给你n个点的坐标,每个点有一个val值,两两之间有一条连线,这条线的价值为两个点的val值的乘积,保证不会有连线穿过原点。现在有一条经过原点的直线,要你求穿过的线价值总和的最大值。思路:
直接进行极角排个序,然后进行扫描,从水平,然后旋转180度,每次把直线两边的点分成两部分,把值加起来相乘,就可以计算出一个最大值,因为题目说了任意直线不是经过原点的,每次碰到的肯定是一个点,而不是多个点。代码:
#include<bits/stdc++.h> #define maxn 50005 #define ll long long using namespace std; const double PI = acos(-1.0); struct node{ ll x,y,val; double ang; }a[maxn]; bool cmp(node x,node y){ return x.ang < y.ang; } int main(){ ll m,n,T; scanf("%lld",&T); while(T--){ scanf("%lld",&n); for(ll i = 1;i <= n;i++){ scanf("%lld %lld %lld",&a[i].x,&a[i].y,&a[i].val); if(a[i].x){ a[i].ang = atan(1.0 * a[i].y / a[i].x); }else{ a[i].ang = PI / 2; } } ll l,r; l = r = 0; sort(a + 1,a + 1 + n,cmp); for(ll i = 1;i <= n;i++){ if(a[i].x >= 0){ r += a[i].val; }else{ l += a[i].val; } } ll ans = l * r; for(ll i = 1;i < n;i++){ if(a[i].x >= 0){ r -= a[i].val; l += a[i].val; }else{ r += a[i].val; l -= a[i].val; } if(ans < l * r){ ans = l * r; } } printf("%lld\n",ans); } return 0; }
相关文章推荐
- 2017 Multi-University Training Contest - Team 7 :1008&hdu6127、Hard challenge
- 【2017 Multi-University Training Contest - Team 7】Hard challenge
- HDU 6127 Hard challenge(思维+计算几何)——2017 Multi-University Training Contest - Team 7
- 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)
- 2017 Multi-University Training Contest - Team 7 hard challenge
- HDU-6038 Function - 2017 Multi-University Training Contest - Team 1(构造置换或强连通分量)
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)
- 2017 Multi-University Training Contest - Team 1 Balala Power!
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
- 2017 Multi-University Training Contest - Team 1 - 1001
- 2017 Multi-University Training Contest - Team 2 1003 Maximum Sequence
- hdu 6047 Maximum Sequence(2017 Multi-University Training Contest - Team 2)
- hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
- hdu 6045 简单的思维题 2017 Multi-University Training Contest - Team 2
- 2017 Multi-University Training Contest - Team 2 TrickGCD
- 【2017 Multi-University Training Contest - Team 9】FFF at Valentine
- 【2017 Multi-University Training Contest - Team 3】RXD's date
- 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- 2017 Multi-University Training Contest - Team 3