[武汉加油] bzoj 5099: [POI2018]Pionek 几何+双指针

几何+双指针

题目大意:现在有 \(n\) 个向量,请你选出来一些向量使它们的和的长度最大,输出最大值的平方。

假如我们已经知道了最终向量的方向,我们要想使长度最大,就需要将所有投影在最终向量正方向上的向量都加起来。

所以我们可以按角度枚举最终向量的方向,我们需要加起来的就是一段移动的区间,我们可以用双指针来维护加起来的向量。

因为最终向量的方向有可能是给出的向量,也有可能是向量之间间隔的方向,所以每次移动指针的时候都要更新一下答案.

因为开始给出的向量不一定有序,所以我们需要先将向量排序。

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#define LL long long
using namespace std;
int n;
const double PI = acos(-1);
LL sx, sy, ans;
struct data
{
    LL x, y; double ang;
    friend bool operator <(const data & a,const data & b) {return a.ang < b.ang;}
}a[400010];
int main()
{
    cin >> n;
    for(int i = 1; i <= n; ++ i)scanf("%lld%lld", &a[i].x, &a[i].y), a[i].ang = atan2(a[i].y,a[i].x);
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n; ++ i)a[n + i].x = a[i].x, a[n + i].y = a[i].y, a[n + i].ang = a[i].ang + 2 * PI;
    for(int l = 1, r = 1; l <= n; ++ l)
    {
        while(r < n + l && a[r].ang - a[l].ang < PI)sx += a[r].x, sy += a[r].y, ans = max(ans, sx * sx + sy * sy), ++ r;
        sx -= a[l].x, sy -= a[l].y, ans = max(ans, sx * sx + sy * sy);
    }
    cout << ans;
    return 0;
}

原文地址:https://www.cnblogs.com/wljss/p/12344129.html

时间: 2024-08-01 17:25:56

[武汉加油] bzoj 5099: [POI2018]Pionek 几何+双指针的相关文章

【BZOJ5099】[POI2018]Pionek 几何+双指针

[BZOJ5099][POI2018]Pionek Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只能执行一次,但你可以随意更改它们的执行顺序.棋子可以重复经过同一个点,两条指令的方向向量也可能相同.你的目标是让棋子最终离原点的欧几里得距离最远,请问这个最远距离是多少? Input 第一行包含一个正整数n(n<=200000),表示指令条数. 接下来n行,每行两个整数x,y(|x|,|y|<=1

[POI2018]Pionek

[POI2018]Pionek 题目大意: 在无限大的二维平面的原点放置着一个棋子.你有\(n(n\le2\times10^5)\)条可用的移动指令,每条指令可以用一个二维整数向量表示.请你选取若干条指令,使得经过这些操作后,棋子离原点的距离最大. 思路: 将所有向量极角排序,然后你选取的向量一定是里面连续的一段,由于所有向量排成一个环,所以要复制一遍接在后面,最后用尺取法枚举左右端点即可. 时间复杂度\(\mathcal O(n\log n)\). 源代码: #include<cmath>

武汉加油!(Python版)

#武汉加油!import turtle as tt.pensize(20)t.pencolor("blue")t.setup(1700, 600) t.penup()#-t.goto(-400,150)t.pendown()t.goto(-320,150) t.penup()#--t.goto(-400,100)t.pendown()t.goto(-220,100) t.penup()#1t.goto(-350,70)t.pendown()t.goto(-350,-50) t.penu

bzoj 5103 [POI2018]R&#243;?norodno??

这个题没有想出来.. 首先显然的一点是我们要对每种颜色做一次不重复的贡献计算. 同种颜色的贡献就是矩形的并.从网上查了资料,矩形面积并用的是扫描线,那么这个我们也可以用扫描线了. 我们考虑枚举横坐标,维护存在于当前横坐标的所有纵坐标的区间.一个性质是所有的矩形都是边长为k的正方形,那么在加入或删除一个区间时只可能影响到一个连续的区间.我们只需要对这个区间操作就行了. 我用的set维护,因为bzoj开O2,所以比其他数据结构要快一些,但是没有bitset快,要跑47s,记得加上fread,这个题的

武汉赢了!成功突围成为自贸区!如今的武汉你已高攀不起!

8月31日,据新华社消息,中国新增7个自贸区,分别位于辽宁.浙江.河南.湖北.重庆.四川.陕西. 在第三批入选的7个自贸试验区中,湖北是唯一定位为战略性新兴产业和高技术产业基地的省份. 等待了三年! 自贸区终于来啦! 历时三年 2013年底武汉市开始筹备: 2014年我省向国家申报中国内陆(湖北武汉)自贸试验区: 2015年,将宜昌.襄阳纳入,重新向国家申报中国内陆(湖北)自贸试验区. 历时3年,期间先后到上海自贸试验区学习多次,各种努力后终于获批! 要知道, 全国21个省市(自治区)都提出了申

如何使用python,才能像人民日报的“点亮”武汉景点

如何使用python,才能像人民日报的“点亮”武汉景点 前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Allen PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 4月8日零时起,武汉解除了离汉离鄂通道管控措施,有序恢复对外交通.“封城”76天后,武汉与外界的通道重新开启. 昨晚,人民日报公众号推送了一篇文章,通过点击武汉的各个景点图片,可以将图片“点亮

年末小随笔

今天是年前在公司的最后一天了,做做总结,学习学习mongodb数据库. 今年工作总体表现来讲,确实做的还不够好.前半段时间对自己要求还不够高,平时基本任务完成后就完事了,没有再进一步的去学习.后半段时间针对这一点进行了加强学习,特别是代码平时开发上更加注重细节优化,不是为了完成任务而去做.年后要更加注重自我知识提升,学习更多知识. 最近武汉肺炎病毒传的沸沸扬扬的,我也有同事是武汉本地的,他昨天回家了.希望武汉坚强,一定能抵抗过去的.武汉加油! 原文地址:https://www.cnblogs.c

1月25日工作总结

近日疫情看起来十分不容乐观,希望武汉的同胞能坚强挺过这一关,不要有那么多人在2020离开我们.我十分相信,终有一天,这段混乱的日子将会过去!把握机遇,迎接挑战,愿君灼灼千里目,终有一日天光破!武汉加油!!! A.首先对于战略进行总结——活得清楚才能活得好 1.如何快速进入状态 远离手机,放歌 2.做题应该怎么做 3.选题怎么选 4.一天怎么衡量自己学的好不好 定量,定规矩,定时间 5.究竟需要什么 6.怎么读懂代码,不被迷惑 分类击破,变量是有类型的,存储的,运算的.理解存储变量是理解题意的第一

JQ——遍历(each遍历、数组遍历)、添加(append、appendTo)

1.each实现遍历操作: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>each实现的遍历</title> <script type="text/javascript" src="../js/jquery-1.8.3.js" ></script> <script>