包含点 (0,0) 的三角形数量

2023-12-13

首先,归功于 Topcoder,因为这个问题被用在他们的一个 SRM 中(但他们没有对此进行编辑..)

在这个问题中,我得到了 n 个点(其中 n 介于 1 到 1000 之间)。对于每三个点,显然有一个三角形将它们连接起来。问题是,这些三角形中有多少个包含点 (0,0)。

我尝试查看堆栈上的这个线程:

围绕一个点的三角形点

但我无法理解使用什么数据结构/如何使用它们来解决这个问题。

此问题的一个明显的简单解决方案是使用低效的 O(n^3) 算法并搜索所有点。但是,有人可以帮助我提高效率,并在 O(n^2) 时间内完成吗?

下面是 Petr 对这个问题的解决方案......它很短,但有一个我无法理解的大想法。

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class TrianglesContainOrigin {
    public long count(int[] x, int[] y) {
        int n = x.length;
        long res = (long) n * (n - 1) * (n - 2) / 6;
        for (int i = 0; i < n; ++i) {
            int x0 = x[i];
            int y0 = y[i];
            long cnt = 0;
            for (int j = 0; j < n; ++j) {
                int x1 = x[j];
                int y1 = y[j];
                if (x0 * y1 - y0 * x1 < 0) {
                    ++cnt;
                }
            }
            res -= cnt * (cnt - 1) / 2;
        }
        return res;
    }
}

Let there be a triangle with 3 points p1=(x_1, y_1),p2=(x_2, y_2) and p3=(x_3, y_3). Let p1, p2, p3 be the position vectors. If the origin lies within, then cross product of any one position vector with other two will be different in sign (one negative, one positive). But if the origin lies outside, then there will be one point which has negative cross product with both the other points. So for each point i, find points whose cross product is less than 0. Now if you select any two of these points and make a triangle along with point i, the origin will be outside this triangle. That's why you subtract from res (selection of 2 from such points + point i). This was by far the best solution many implemented as it did not have the problem of precision with double etc. enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包含点 (0,0) 的三角形数量 的相关文章

  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 在 Python 中进行模糊键查找的最佳方法?

    我遇到一个问题 我需要在哈希映射中进行模糊查找 即返回与最接近查询的键相对应的值 在我的例子中是通过 Levenshtein 距离测量的 我目前的方法是子类化dict使用特殊的查找方法计算所有键的编辑距离 然后返回得分最低的键的值 基本上是
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • Data.Sequence 中的 inits 和 tails 如何工作?

    Louis Wasserman 编写了当前的实现inits and tails in Data Sequence 他表示它们非常高效 事实上 只要查看代码 我就可以看到 无论它们在做什么 它们都是以干净 自上而下的方式进行的 这往往会给惰性
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑

随机推荐

  • 在 C# 中,类中的析构函数和 Finalize 方法有什么区别?

    类中的析构函数和 Finalize 方法之间有什么区别 如果有 我最近发现 Visual Studio 2008 认为析构函数与 Finalize 方法同义 这意味着 Visual Studio 不允许您在类中同时定义这两种方法 例如下面的
  • 使用 HttpWebRequest 时,为什么我在某些链接上收到“(304) Not Modified”错误?

    任何想法为什么在我尝试使用 HttpWebRequest 访问的某些链接上我收到 远程服务器返回错误 304 未修改 在代码中 我使用的代码来自杰夫的帖子在这里 该页面似乎消失了 请参阅在 Wayback Machine 上存档副本 请注意
  • Django Apache 错误:没有名为“encodings”的模块。 Windows Server 2008 R2 标准版

    我从 git 克隆 repo 我创建 venv python m venv myenv myenv scripts activate bat pip install r requirements txt pip install mod ws
  • 如何销毁在angular2中使用DynamicComponentLoader创建的所有组件?

    嗨 我发现了一篇关于使用动态组件加载器和处置方法添加和删除组件的帖子 我想一次性销毁所有创建的组件 我有笨蛋demo以及我找到演示的来源Angular 2 动态添加 删除组件 我知道我想存储所有componentref在一个数组中 然后迭代
  • 适用于 OpenGL 的 Android 传感器

    我想让 android 传感器与 opengl 一起工作 将 opengl 的相机旋转到手机指向的任何地方 详细说明一下 如果玩家正在看东方 我希望 opengl 的相机在游戏中也指向东方 如果玩家指向天空 我想将opengl的相机指向天空
  • 如何防止 CSS 关键帧动画在页面加载时运行?

    我有一个 div 其中的内容为动画 container position relative width 100px height 100px border style inset content visibility hidden webk
  • EF 针对 SQL 数据库项目反向 POCO?

    我可以直接针对 SQL 数据库项目使用 EF 反向 POCO 生成器吗 我将 SQL 数据库定义保存在 Visual Studio SQL 数据库项目 中 这为我提供了一些不错的版本控制功能 架构比较和一些漂亮的部署功能 有时我在开发过程中
  • 获取私人 gitlab 存储库

    尽管进行了所有尝试 我还是无法成功使用 go get 从 gitlab 获取私人仓库 我尝试过 netrc gitconfig 但它不起作用 我有一台带有 git 的私人机器 假设它是 mymachine prv git config gl
  • R:更改函数内的级别

    我有一个 data frame 我想更改因子变量的水平 所以我这样做 gt df1 lt data frame id 1 5 fact1 factor letters 1 5 gt head df1 id fact1 1 1 a 2 2 b
  • Windows Batch/解析html网页中的数据

    是否可以使用Windows批处理从Web html页面解析数据 假设我有一个网页 www domain com data page 1 页面源html div a href post view 664654 在这种情况下 我需要从网页获取
  • 如何使用 OpenCV 将偏导数高斯核应用于图像?

    我正在尝试重现一篇论文的结果 其中他们将图像与高斯核的水平偏导数进行卷积 我还没有找到任何方法可以用 OpenCV 来实现这一点 那可能吗 我是否必须获得高斯滤波器 然后手动计算偏导数 正如 akarsakov 所说 OpenCV 没有为此
  • 如何在 Visual Studio 2010 中调试从另一个进程启动的 C# .NET 应用程序

    我有一个用 C 编写的 NET GUI 应用程序和一个 PDF 打印机 PDF 打印机有一个字段 您可以在其中设置启动外部应用程序的命令 在这种情况下 我可以使用这台打印机打印文档 并且打印机启动我的 EXE 文件 并将生成的 PDF 文件
  • 播放直播时向每个 m3u8 和 ts 文件附加参数

    我在直播环境中使用 videojs 并使用 nginx 安全 URL 来保护流 详情请看这里 https www nginx com blog secure urls secure link module nginx plus 该算法运行良
  • 选择 Mat 的子集并复制它们以在 C++/Opencv 中创建新的 mat

    在 C opencv 中 如何选择大 Mat 的子集并复制它们以创建新 Mat 我知道如何使用 copyto colrange rowrange 等 但不知道如何将它们组合在一起来开发体面且高效的代码 谢谢 您可以使用copyTo 以此目的
  • OS X Lion 上的 68k 汇编器

    我需要为我的大学课程使用 68k 的汇编程序进行一些编程 我正在寻找一个程序来在 os x lion 上执行此操作 我发现 easy68k 正在 wine 中运行 但我感觉它运行不正常 有什么猜测吗 Vasm是一个可以针对 68k 构建并在
  • python pandas 动态读取csv文件

    我想在 for 循环中迭代地从一组 csv 文件中读取数据 csv 文件命名为 1 csv 2 csv等等 读取数据的正常方法是 data pd read csv 1 csv 请有人建议如何更换1 by i当使用一个for loop I t
  • 用于确定操作系统类型的环境变量(Windows XP、Windows 7)

    我想在 XML 文件中区分 Windows XP 和 Windows 7 我想我会在 XML 中使用环境变量 但是我找不到 Windows 中定义的任何提供此信息的系统环境变量 我看到 OSTYPE 变量 但它仅在 Windows 7 中可
  • 使用 Ajax 调用的结果更新 div

    我想显示下面的 ajax 函数对 dom 中的 div 的响应 更新 div 在不使用重型插件的情况下如何做到这一点 url http dowmian com xs1 getcam php type GET data id success
  • 如何控制IE中onbeforeunload的动作?

    我有一个问题onbeforeunload最近 当用户尝试关闭 IE 浏览器时 我需要弹出一个投票页面 我通过使用以下方法做到了 以及主要结构makevote 在javascript中如下 function makevote comet di
  • 包含点 (0,0) 的三角形数量

    首先 归功于 Topcoder 因为这个问题被用在他们的一个 SRM 中 但他们没有对此进行编辑 在这个问题中 我得到了 n 个点 其中 n 介于 1 到 1000 之间 对于每三个点 显然有一个三角形将它们连接起来 问题是 这些三角形中有