HDU 6127 Hard challenge(极角 + 二分)

Hard challenge

思路

通过极角排序,这里通过修改后,所有点的角度在[0,2π)[0, 2 \pi)[0,2π)之间,

然后O(n)O(n)O(n)扫一趟,对当前在的级角加上π\piπ就是我们要找的角度了,这里通过二分来实现查找。

接下来就只要通过前缀和思想来得到这个最大值了。

假设我们当前所在的是iii,因为角度在[0,2π)[0, 2\pi)[0,2π)所以我们查找的jjj的下标可能会有两种情况:

1:j > i,这个时候有连续的一段区间[l, j]是属于一个集合。

2:j < i,这个时候有连续的一段区间[j + 1, i - 1]是属于一个集合,

所以我们只要特判这两种情况即可。

代码

/*Author : lifehappy
*/
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>using namespace std;typedef long long ll;const double pi = acos(-1.0);
const double eps = 1e-5;
const double inf = 1e100;int Sgn(double x) {return x < -eps ? -1 : x > eps;
}struct Vector {double x, y, angle;int w;bool operator < (Vector &a) const {return x < a.x;}void print() {printf("%f %f\n", x, y);}void read() {scanf("%lf %lf", &x, &y);}Vector(double _x = 0, double _y = 0) : x(_x), y(_y) {}double mod() {return sqrt(x * x + y * y);}double mod2() {return x * x + y * y;}Vector operator + (const Vector &a) {return Vector(x + a.x, y + a.y);}Vector operator - (const Vector &a) {return Vector(x - a.x, y - a.y);}double operator * (const Vector &a) {return x * a.x + y * a.y;}double operator ^ (const Vector &a) {return x * a.y - y * a.x;}Vector Rotate(double &angle) {return Vector(x * cos(angle) - y * sin(angle), x * sin(angle) + y * cos(angle));}Vector operator << (const double &a) {return Vector(x * a, y * a);}Vector operator >> (const double &a) {return Vector(x / a, y / a);}
};typedef Vector Point;double Dis_pp(Point a, Point b) {return sqrt((a - b) * (a - b));
}double Angle(Vector a, Vector b) {double ans = atan2(a ^ b, a * b);if(ans < 0) ans += 2 * pi;return ans;// return atan2(a ^ b, a * b);
}double To_lefttest(Point a, Point b, Point c) {return (b - a) ^(c - a);
}int Toleft_test(Point a, Point b, Point c) {return Sgn((b - a) ^ (c - a));
}struct Line {Point st, ed;Line(Point _st = Point(0, 0), Point _ed = Point(0, 0)) : st(_st), ed(_ed) {}bool operator < (const Line &t) {return st.x < t.st.x;}void read() {scanf("%lf %lf %lf %lf", &st.x, &st.y, &ed.x, &ed.y);}
};bool Parallel(Line a, Line b) {return Sgn((a.st - a.ed) ^ (b.st - b.ed)) == 0;
}bool Is_cross(Line a, Line b) {return Toleft_test(a.st, a.ed, b.st) * Toleft_test(a.st, a.ed, b.ed) <= 0 && Toleft_test(b.st, b.ed, a.st) * Toleft_test(b.st, b.ed, a.ed) <= 0;
}Point Cross_point(Line a, Line b) {if(!Is_cross(a, b)) {return Point(inf, inf);}else {double a1 = fabs(To_lefttest(a.st, a.ed, b.st)), a2 = fabs(To_lefttest(a.st, a.ed, b.ed));return ((b.st << a2) + (b.ed << a1)) >> (a1 + a2);}
}Point Shadow(Line a, Point b) {Point dir = a.ed - a.st;return a.st + (dir << (((b - a.st) * dir) / dir.mod2()));
}Point Reflect(Line a, Point b) {return (Shadow(a, b) << 2) - b;
}bool inmid(double a, double b, double x) {if(a > b) swap(a, b);return Sgn(x - a) >= 0 && Sgn(b - x) >= 0;
}bool Point_in_line(Line a, Point b) {if(Toleft_test(a.st, a.ed, b) != 0) return false;return inmid(a.st.x, a.ed.x, b.x) && inmid(a.st.y, a.ed.y, b.y);
}double Dis_lp(Line a, Point b) {Point h = Shadow(a, b);if(Point_in_line(a, h)) {return Dis_pp(h, b);}return min(Dis_pp(a.st, b), Dis_pp(a.ed, b));
}double Dis_ll(Line a, Line b) {if(Is_cross(a, b)) return 0;return min({Dis_lp(a, b.st), Dis_lp(a, b.ed), Dis_lp(b, a.st), Dis_lp(b, a.ed)});
}double Area(vector<Point> p) {int n = p.size();double ans = 0;for(int i = 0; i < n; i++) {ans += p[i] ^ p[(i + 1) % n];}return 0.5 * ans;
}bool cmp(Point a, Point b) {return a.angle < b.angle;
}const int N = 5e4 + 10;Point a[N];ll value[N];int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T;scanf("%d", &T);while(T--) {int n;scanf("%d", &n);for(int i = 1; i <= n; i++) {a[i].read();scanf("%d", &a[i].w);a[i].angle = Angle(Point(1, 0), Point(a[i].x, a[i].y));}ll sum = 0, ans = 0;sort(a + 1, a + 1 + n, cmp);for(int i = 1; i <= n; i++) {value[i] = value[i - 1] + a[i].w;sum += a[i].w;}for(int i = 1; i <= n; i++) {double now = a[i].angle, need = now + pi;if(need > 2 * pi) need -= 2 * pi;int l = 1, r = n;while(l < r) {int mid = l + r + 1 >> 1;if(a[mid].angle > need) r = mid - 1;else l = mid;}if(a[l].angle < need) l++;l--;if(l >= i) {ans = max(ans, (sum - value[l] + value[i - 1]) * (value[l] - value[i - 1]));}else {ans = max(ans, (sum - value[i - 1] + value[l]) * (value[i - 1] - value[l]));}}printf("%lld\n", ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2664 树上游戏(点分治/计数题计算贡献/树上差分)

P2664 树上游戏 对于树上n个点&#xff0c;每个点有不同颜色&#xff0c;求解每个点到其他点的路径上不同颜色个数之和。 首先看到这种树上点对问题&#xff0c;我们可以想到点分治&#xff0c;然后考虑每次分治如何求解答案&#xff0c;本质上就是一个数颜色的问题&#xff…

2019-03-4-算法-进化(罗马数字转整数)

题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如…

设置ABP默认使用中文

ABP提供的启动模板, 默认使用是英文:虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.前期准备使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:abp new AbpStudy关于MVC的启动模板可以看文档, 这里就不赘述.使用ABP版本的是当前最新…

P3835 【模板】可持久化平衡树

P3835 【模板】可持久化平衡树 好久没有打平衡树了&#xff0c;赶紧来复习一下&#xff0c;平衡树这种东西还是很有用的&#xff0c;可以很灵活地解决一些问题。 fhq_treap 这道题是可持久化的权值平衡树&#xff0c;支持以下几个操作 1、 插入 xxx 2、 删除 xxx&#xff08…

基础篇--Java IO--概览

字符流、字节流、输入流、输出流 Java 中使用IO&#xff08;输入输出&#xff09;来读取和写入&#xff0c;读写磁盘文件、内存、网络数据。输入输出是相对内存而言&#xff0c;往内存中读数据就为输入流&#xff0c;从内存中往外写就是输出流。 根据处理类型分为字符流、字节…

半平面交练习(计算几何)

四&#xff1a;半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <iostream>using namespace std;const double pi ac…

.NET轻松写博客园爬虫

爬虫&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网站的程序或者脚本。.NET写爬虫非常简单&#xff0c;并能轻松优化性能。今天我将分享一段简短的代码&#xff0c;爬出博客园前200页精华内容&#xff0c;然后通过微小的改动&#xff0c;将代码升级为多线程爬虫&am…

P5055 【模板】可持久化文艺平衡树

P5055 【模板】可持久化文艺平衡树 突然发现fhq_treap也是可以支持区间翻转的&#xff0c;所以基本上和其他平衡树是一样的&#xff0c;而且还满足重量平衡树的性质&#xff0c;真是太优秀了&#xff0c;只不过常数稍微比较大。 然后这里我们变成了一颗区间平衡树&#xff0c…

kettle同步数据中文乱码问题解决

最近在使用kettle进行数据同步的时候&#xff0c;发现同步来的中文数据产生了乱码。试了下网上的解决方案&#xff0c;最终解决了这个问题。步骤如下&#xff1a; 1&#xff1a;kettle中配置源数据库、目标数据库编码 2&#xff1a;编辑“表输入”&#xff0c;去掉勾选“允许建…

WTM重磅更新,LayuiAdmin免费用 and more

从善如登&#xff0c;从恶如崩。对于一个开发人员来说&#xff0c;那就是做一个好的系统不容易&#xff0c;想搞砸一个系统很简单&#xff0c;删库跑路会还不会么。对于我们开源框架的作者来说&#xff0c;做一个好的框架就像登山&#xff08;也许是登天&#xff09;&#xff0…

Lady Layton with Math(杜教筛)

Lady Layton with Math ∑i1n∑j1nϕ(gcd(i,j))∑d1nϕ(d)∑i1n∑j1n[gcd(i,j)d]∑d1nϕ(d)∑i1nd∑j1nd[gcd(i,j)1]∑d1nϕ(d)(2∑i1nd∑j1i[gcd(i,j)1]−1)∑d1nϕ(d)(2∑i1ndϕ(i)−1)\sum_{i 1} ^{n} \sum_{j 1} ^{n} \phi(gcd(i, j))\\ \sum_{d 1} ^{n} \phi(d) \sum_{…

概率期望复习

概率期望 P(A并B)P(A)P(B)-P(A交B) 条件概率 已知A发生B发生的概率&#xff0c;记作P(B|A) 四种情况 P(AB都发生)a,P(AB都不发生)b P(只有A发生)c,P(只有B发生)d P(B|A)a/(ac),即P(B|A)P(AB)/P(A) 全概率公式 P(A)P(B1)P(A|B1)…P(Bn)P(A|Bn) 三门问题 生日悖论 贝叶斯…

kettle数据库操作OPTION SQL_SELECT_LIMIT=DEFAULT问题解决

今天在使用kettle配置数据库映射的时候&#xff0c;有如下报错&#xff1a; Couldnt get field info from [select * from pre_user_base_bak]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax …

.netcore 分布式事务CAP2.6 快速入门

CAP介绍&#xff1a;CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性问题。一个简单的列子&#xff0c;如&#xff1a;订单系统创建订单后需要通知邮件通知用户下单成功&#xff0c;解决方案有下面几种&#xff1…

[SDOI2017]数字表格

[SDOI2017]数字表格 假定n<m∏i1n∏j1mf(gcd(i,j))∏d1nf(d)∑i1n∑j1m[gcd(i,j)d]∏d1nf(d)∑i1nd∑j1md[gcd(i,j)1]∏d1nf(d)∑k1ndμ(k)nkdmkd由于nd具有分块性质&#xff0c;并且n&#xff0c;m不大&#xff0c;所以我们可以先预处理出斐波那契数列的前缀积&#xff0c;…

#3601. 一个人的数论

#3601. 一个人的数论 首先这个转化还是很巧妙的&#xff0c;或者很套路的&#xff0c;直接莫比乌斯反演&#xff0c;然后看到了自然数幂之和的形式&#xff0c;那么我们就可以转化为多项式处理&#xff0c;项数就减少到了d1&#xff0c;然后看到题目给出的都是质因数分解结果&a…

2019-03-5-算法-进化(最长公共前缀)

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","…

基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(2)

上一篇里面整理了一下需求和思路&#xff0c;自定义了扩展的字典对象&#xff0c;这里我们再继续深入编码。BaseExtensions类&#xff0c;这个类作未来任何需要Key-Value形式扩展的基类1234567891011121314151617181920212223242526272829303132333435363738394041424344454647…

P4196 [CQOI2006]凸多边形 /【模板】半平面交

P4196 [CQOI2006]凸多边形 /【模板】半平面交 本来是个板子题&#xff0c;而且我这个板子之前在POJ写过一些题目了&#xff0c;但是这里一直让我RE。 后来解决办法竟然是&#xff1a;先读入第一个多边形不加边&#xff08;存下来&#xff09;&#xff0c;然后去读其他多边形&a…

自然数幂之和

自然数幂之和 https://blog.csdn.net/suncongbo/article/details/97622131 这个文章的整理非常全面。