hdu61272017杭电多校第七场1008Hard challenge
Hard challenge
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 1487 Accepted Submission(s): 352
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.
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).
A single line contains a nonnegative integer, denoting the answer.
2
1 1 1
1 -1 1
3
1 1 1
1 -1 10
-1 0 100
1100
Statistic | Submit | Clarifications | Back
题意:平面上一些点,两点连线的价值等于点的价值的乘积,定义经过原点的一条直线的值等于它所相交的线段的价值的总和。
思路:现对这些点进行极角排序,给直线分为两部分,s1和s2分别表示两部分的价值。设排序后的第一个点(分到左边部分即从第一个点右边一点开始)开始逆时针旋转,离开一个点的时候,s1减去那个点的值,s2加上那个点的值;另设一个变量维护当前的扫描始终是180°。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define ll long long
const double pi=acos(-1.0);
const double eps=1e-8;
int T;
int n;
struct Point{
int x,y;
int val;
double ang;
}point[200000+50];
double angle(Point a){
double x=abs(a.x);
double y=abs(a.y);
if (a.x>0&&a.y>0) return atan(y/x)*180.0/pi;
else if (a.x<0&&a.y>0) return 180.0-atan(y/x)*180.0/pi;
else if (a.x<0&&a.y<0) return 180.0+atan(y/x)*180.0/pi;
else if (a.x>0&&a.y<0) return 360.0-atan(y/x)*180.0/pi;
else if (a.x==0){
if (a.y>0) return 90;
else if (a.y<0) return 270;
else return -1;
}
else if (a.y==0){
if (a.x>0) return 0;
else if (a.x<0) return 180;
else return -1;
}
return -1;
}
bool cmp(Point a,Point b){
return a.ang<b.ang;
}
int main(){
// freopen("1.txt","r",stdin);
scanf("%d",&T);
while (T--){
scanf("%d",&n);
ll sum=0;
for (int i=1;i<=n;i++){
scanf("%d %d %d",&point[i].x,&point[i].y,&point[i].val);
sum+=point[i].val;
point[i].ang=angle(point[i]);
}
sort(point+1,point+n+1,cmp);
for (int i=n+1;i<=n+n;i++){
point[i]=point[i-n];
point[i].ang+=360;
}
ll s1=0,s2=0;
int r;
for (int i=1;i<=n;i++){
if (point[i].ang-point[1].ang<180){
s1+=point[i].val;
}
else{
r=i;
break;
}
}
s2=sum-s1;
int l=1;
ll ans=0;
while (l<=n){
ans=max(ans,s1*s2);
s1-=point[l].val;
s2+=point[l].val;
l++;
while (r<=2*n&&point[r].ang-point[l].ang<180){
s1+=point[r].val;
s2-=point[r].val;
r++;
}
}
printf("%lld\n",ans);
}
}
hdu61272017杭电多校第七场1008Hard challenge的更多相关文章
- 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)
Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...
- 杭电多校第七场-J-Sequence
题目描述 Let us define a sequence as belowYour job is simple, for each task, you should output Fn module ...
- 2017杭电多校第七场1011Kolakoski
Kolakoski Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Tota ...
- 2017杭电多校第七场1005Euler theorem
Euler theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
- 【杭电多校第七场】A + B = C
原题: Given a,b,c, find an arbitrary set of x,y,z such that a*10^x+b*10^y=c*10^z and 0≤x,y,z≤10^6. 给你三 ...
- [2019杭电多校第七场][hdu6656]Kejin Player
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意为从i级花费a元有p的概率升到i+1级,有1-p的概率降到x级(x<i),查询从L级升 ...
- [2019杭电多校第七场][hdu6655]Just Repeat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6655 题意是说两个人都有一些带有颜色的牌,两人轮流出牌,但是不能出对面出过的颜色的牌,最后谁不能出牌谁 ...
- [2019杭电多校第七场][hdu6651]Final Exam
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6651 题意:n个科目,总共m分,通过一科需要复习花费科目分数+1分钟,在不知道科目分数的情况下,问最少 ...
随机推荐
- eclipse安装Aptana 插件,并设置使之能提示css,js,html,帮助编写代码
在Eclipse 4.2 上安装 Aptana 3.2遇到的错误 就是找不到什么文件来着,我在装maven的时候也遇到了. 烦人... (这文章是我还在用eclipse的时候,为了编写js代码的时候提 ...
- Linux下汇编语言学习笔记60 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Elasticsearch5.6搭建及拼音中文混合搜索实现
https://blog.csdn.net/UUfFO/article/details/78154499
- hdu - 2851 Lode Runner (最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=2851 首先有n层,每层的路径都有一个起点和终点和对应的危险值,如果某两层之间有交集,就能从这一层上到另外一层,不 ...
- poj_2524_Ubiquitous Religions_201407211506
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23390 Accepted: ...
- transaction transaction transaction 最大费用最大流转化到SPFA最长路
//当时比赛的时候没有想到可以用SPFA做,TLE! Problem Description Kelukin is a businessman. Every day, he travels aroun ...
- KMP算法 C#实现 字符串查找简单实现
KMP算法 的C#实现,初级版本 static void Main(string[] args) { #region 随机字符 StringBuilder sb = new StringBuilder ...
- Eclipse替换find/Replace
使用快捷键:ctrl+F replaceAll
- 017 SSH
Router>en Router#config t Enter configuration commands, one per line. End with CNTL/Z. Router(co ...
- prototype与几个循环的心得
<一>prototypeprototype其实是函数的一个属性,并且只有函数有这个属性,这个属性就是给函数增加函数或者属性的,比如写一个function one(){},那么one.pro ...