HDU6127Hard challenge

Hard challenge

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 1305    Accepted Submission(s): 557

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

Source

2017 Multi-University Training Contest - Team 7

/*
* @Author: lyuc
* @Date:   2017-08-15 15:31:46
* @Last Modified by:   lyuc
* @Last Modified time: 2017-08-17 09:01:32
*/
/*
 题意:给你n个点,每个点都有权值,并且每两个点之间都有一条线,这条线的权值就是端点的权值之积,问你从过原点画一条直线,
     使得穿过直线的权值之和最大

 思路:这里有一个推论,假如有四个已经按照极角排好序的点,a,b,c,d 有条直线在 b c之间,那么两两之间直线权值和为:
     ac+ad+bc+bd=a*(c+d)+b*(c+d)=(a+b)*(c+d);  这样题目就出来了,首先将所有的点按照极角排序,然后遍历所有的点
     ,比较得到的每个点
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>

#define LL long long
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define MAXN 50005

using namespace std;

struct Point{
    int x,y;
    LL val;
    double cur;
}point[MAXN];
int t,n;
LL lres,rres;
LL res;

inline bool cmp(Point a,Point b){
    return a.cur<b.cur;
}

inline void init(){
    lres=0;
    rres=0;
    res=0;
}

int main(){
    // freopen("in.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    scanf("%d",&t);
    while(t--){
        init();
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d%d%lld",&point[i].x,&point[i].y,&point[i].val);
            if(point[i].x==0){//如果在y轴
                if(point[i].y>=0)
                    point[i].cur=pi/2;
                else
                    point[i].cur=-pi/2;
            }else{
                point[i].cur=atan(point[i].y*1.0/point[i].x);
            }
            if(point[i].x>=0){
                rres+=point[i].val;
            }else{
                lres+=point[i].val;
            }
        }
        sort(point,point+n,cmp);
        res=lres*rres;
        for(int i=0;i<n;i++){
            if(point[i].x>=0){
                rres-=point[i].val;
                lres+=point[i].val;
            }else{
                lres-=point[i].val;
                rres+=point[i].val;
            }
            res=max(res,lres*rres);
        }
        printf("%lld\n",res);
    }
    return 0;
}
时间: 2024-10-13 15:59:40

HDU6127Hard challenge的相关文章

securityoverridehacking challenge 解题思路汇总——JavaScript

通过了Advanced部分( securityoverridehacking challenge 解题思路汇总--Advanced),下面就进入JavaScript了.总的来说,这个部分比较简单,因为JavaScript是高度可控的东西.也就是说,安全角度而言,JavaScript是不可信的. 4        Javascript 4.1       Login Bypass 这题比较容易让人想多,逛了下hint,发现很简单.观察,首先请求了index.php,然后跳转到了fail.php,并

2292: 【POJ Challenge 】永远挑战

2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 230[Submit][Status][Discuss] Description lqp18_31和1tthinking经常出题来虐ftiasch.有一天, lqp18_31搞了一个有向图,每条边的长度都是1. 他想让ftiasch求出点1到点 N 的最短路."水题啊.", ftiasch这么说道. 所以1tth

Codechef July Challenge 2014部分题解

Dish Owner(并查集) 链接:http://www.codechef.com/JULY14/problems/DISHOWN/ 题意分析:本题主要操作就是给出0 x y时,拥有第x道菜的厨师与拥有第y道菜的厨师pk,谁拥有的所有菜的其中一道菜(不一定是x或y)的分值比较高谁就获胜,并赢得loser的所有菜.即比较的是每个人分值最高的菜,所以对于非loser的人来说,他的分值最高的菜是不变的.综合题意用并查集易解. #include <cstdio> const int Maxn=100

东方14ACM小组 15:Challenge 11

Challenge 11 查看 提交 统计 提问 总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求某次操作后连续一段的和 输入 第一行两个正整数N和M.第二行N的整数表示这个数列.接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的数修改为y:若该字符为'Q',则表示一个询问操作,接下来三个整

12:Challenge 5(线段树区间直接修改)

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)将某连续一段同时改成一个数 (2)求数列中某连续一段的和 输入 第一行两个正整数N和M.第二行N的整数表示这个数列.接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来三个整数x.y和z,表示在[x,y]这段区间的数改为z:若该字符为'Q',则表示一个询问操作,接下来两个整数x和y,表示求[x,y]这段

Python Challenge——T2

想起来之前在学校论坛上看到大神推荐的一款python游戏 Python Challenge,于是做了几道题,还很有意思. 这是第二题,先放链接:http://www.pythonchallenge.com/pc/def/map.html 题目如下: 还有两段文字提示: everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bm

Python Challenge 6

第6关: 既然下面的与riddle没有关系,那就不要管了啦,想哥什么时候有钱了再汇给你呗.现在还只是工科屌丝一枚. 看上面,除了一个注释<!--zip-->就没了,拉进url一试,yes, find the zip. 压缩文件,再拉一个channel.zip就弄出来了. 剩下的与第5关类似. the next nothing is ... import urllib import urllib.request import zipfile import os import os.path im

HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战). (3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应). (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,

HDU 6127: Hard challenge

Hard challenge #include<bits/stdc++.h>typedef long long L;using namespace std;#define endl '\n'const int MAXN=5*1e4+5;struct Point{ int x,y,val;}p[MAXN];bool cmp(const Point &x,const Point &y){ if(x.x==0)return true; if(y.x==0)return false;