包含点 (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) 的三角形数量 的相关文章

  • 为什么我的 Project Euler Problem 12 算法这么慢?

    我已经在 Scala 中为 PE P12 创建了解决方案 但速度非常非常慢 有人可以告诉我为什么吗 如何优化这个 calculateDevisors 简单的方法和calculateNumberOfDivisors 除数函数具有相同的速度 i
  • 找到不(必要)与二进制矩阵中的图像边界对齐的最大矩形

    我在用这个解决方案 https stackoverflow com questions 2478447 find largest rectangle containing only zeros in an nn binary matrix在
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 对矩阵进行舍入,保留行和列总计

    想要 以保留行和列总计的方式对矩阵进行舍入的 伪 代码 问题从向量开始 X and Y of 非负整数 with Sum X Sum Y 想要圆X Y Sum X 同时保留行和列总计 这是婚姻问题的一种 Xa需要进行一定次数的握手 拨打该号
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 如何在单向链表(一次遍历中)中从尾部获取第 n 个节点?

    所以我在一次考试中得到了这个问题 如何从单链表的尾部获取第 n 个节点 每个节点都有一个值和一个下一个 指向下一个值的指针 我们得到这个 getNodeFromTail Node head int x 所以我的做法是通过遍历一次来求出列表的
  • 用ast重写代码; Python

    我正在学习 AST 它看起来很强大 但我很困惑代码去了哪里以及为什么它消失了 说我想重写 example def fake x n y useless list n return x as example def fake x n retu
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 修订:算法和数据结构

    我需要通过修订来构建和处理数据的想法 例如 我有一个对象数据库 例如汽车 每个对象都有许多属性 这些属性可以是任意的 因此没有一个固定的模式来描述这些对象 这些对象可能保存为键值对 现在我需要更改对象的属性 我不想完全重写它 我希望能够返回
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 优化计算中使用的 # 个线程的算法

    我正在执行一个操作 我们将其称为CalculateSomeData CalculateSomeData 在连续的 代 中运行 编号为 1 x 整个运行中的代数由CalculateSomeData 的输入参数固定 并且是先验已知的 完成一次生
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和

随机推荐

  • 在 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 之间 对于每三个点 显然有一个三角形将它们连接起来 问题是 这些三角形中有