热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用给定点找到离原点的最大可能距离

使用给定点找到离原点的最大可能距离原文:https://www

使用给定点找到离原点的最大可能距离

原文:https://www . geeksforgeeks . org/使用给定的点找到离原点的最大可能距离/

给定 N 个二维点。任务是使用给定点找到离原点的最大可能距离。使用IthT5(xI,y i ) 可以从 (a,b) 移动到 (a + x i ,b + y i )
注: N 位于 11000 之间,每个点最多可以使用一次。

示例:

输入: arr[][] = {{1,1},{2,2},{3,3},{4,4}}
输出: 14.14
我们能移动到的最远的点是(10,10)。

输入: arr[][] = {{0,10},{5,-5},{-5,-5 } }
T3】输出: 10.00

方法:关键的观察是,当点按其向量与 x 轴的角度排序时,答案将包括一些连续范围内的向量。这个事实的证明可以从这里阅读。那么,解决方案相当容易实现。迭代所有可能的范围,计算每个范围的答案,取最大值作为结果。如果实施得当,这是一种 O(N 2 )方法。

下面是上述方法的实现:

// C++ implementation of the approach
#include
using namespace std;
// Function to find the maximum possible
// distance from origin using given points.
void Max_Distance(vector >& xy, int n)
{
    // Sort the points with their tan angle
    sort(xy.begin(), xy.end(), [](const pair& l,
                                  const pair& r) {
        return atan2l(l.second, l.first)
                   });
    // Push the whole vector
    for (int i = 0; i         xy.push_back(xy[i]);
    // To store the required answer
    int res = 0;
    // Find the maximum possible answer
    for (int i = 0; i         int x = 0, y = 0;
        for (int j = i; j             x += xy[j].first;
            y += xy[j].second;
            res = max(res, x * x + y * y);
        }
    }
    // Print the required answer
    cout <}
// Driver code
int main()
{
    vector > vec = { { 1, 1 },
                                    { 2, 2 },
                                    { 3, 3 },
                                    { 4, 4 } };
    int n = vec.size();
    // Function call
    Max_Distance(vec, n);
    return 0;
}

Output:

14.14

推荐阅读
  • poj 3352 Road Construction ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题
    Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • MSP430F5438 ADC12模块应用与学习心得
    在最近的实践中,我深入研究了MSP430F5438的ADC12模块。尽管该模块的功能相对简单,但通过实际操作,我对MSP430F5438A和MSP430F5438之间的差异有了更深刻的理解。本文将分享这些学习心得,并探讨如何更好地利用ADC12模块进行数据采集和处理。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 本文详细探讨了二元Probit模型及其在实际应用中的重要性。作为一种广义线性模型,Probit模型主要用于处理二分类问题,与Logistic模型类似,但其假设误差项服从标准正态分布。尽管Probit模型在某些领域应用较少,但在特定情境下仍具有独特优势。文章不仅介绍了模型的基本原理,还通过实例分析展示了其在经济学、社会学等领域的具体应用。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
author-avatar
杜庆坤66
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有