算法:构成的正方形数量

news2024/9/25 19:25:47
一、算法描述
输入 N 个互不相同的二维整数坐标, 求这 N 个坐标可以构成的正方形数量。(内积为零的两个向量垂直)
第一行输入为 N,N 代表坐标数量,N为正整数。N <= 100
之后的 K 行输入为坐标 x y以空格分隔,x, y 为整数, -10 <= x,y <= 10
用例:
输入
3
1 3
2 4
3 1
输出
0
说明:3个点不足以构成正方形
输入:
4
0 0
1 2
3 1
2 -1
输出:1
说明:此4个点可以构成正方形
题解:
已知:正方形的两个点 (x1, y1)  (x2, y2)
则:正方形另外两个点的坐标为
x3 = x1 + (y1 - y2)   y3 = y1 - (x1 - x2)
x4 = x2 + (y1 - y2)   y4 = y2 - (x1 - x2)
或
x3 = x1 - (y1 - y2)   y3 = y1 + (x1 - x2)
x4 = x2 - (y1 - y2)   y4 = y2 + (x1 - x2)
从另一位博主的文章中学到这一计算公式
原文链接:https://blog.csdn.net/qfc_128220/article/details/127417851
通过上述的公式,只要枚举两个顶点,根据这两个顶点计算出要满足正方形需要的剩下两个顶点,然后判断该顶点是否在输入的列表中是否存在,
如果都存在则方案数+1,最后所得方案数要除以4,因为一个正方形有四条边,每条边都会对这个正方形判断一次。
二、算法实现(Java)
public class CalculateSquareCount {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine());
        String[] points = new String[n];
        for (int i = 0; i < n; i++) {
            points[i] = scanner.nextLine();
        }
        System.out.println(calculateSquareCount(n, points));
    }

    public static int calculateSquareCount(int n, String[] points) {
        int squareCount = 0;
        Set<String> pointSet = new HashSet<>(Arrays.asList(points));
        for (int i = 0; i < n; i++) {
            int[] pointArr1 = Arrays.stream(points[i].split(" ")).mapToInt(Integer::parseInt).toArray();
            int x1 = pointArr1[0];
            int y1 = pointArr1[1];
            for (int j = i + 1; j < n; j++) {
                int[] pointArr2 = Arrays.stream(points[j].split(" ")).mapToInt(Integer::parseInt).toArray();
                int x2 = pointArr2[0];
                int y2 = pointArr2[1];

                // 求另外两个点
                int x3 = x1 - (y1 - y2);
                int y3 = y1 + (x1 - x2);
                int x4 = x2 - (y1 - y2);
                int y4 = y2 + (x1 - x2);
                if (pointSet.contains(x3 + " " + y3) && pointSet.contains(x4 + " " + y4)) {
                    squareCount++;
                }

                // 或者另外两个点
                int x5 = x1 + (y1 - y2);
                int y5 = y1 - (x1 - x2);
                int x6 = x2 + (y1 - y2);
                int y6 = y2 - (x1 - x2);
                if (pointSet.contains(x5 + " " + y5) && pointSet.contains(x6 + " " + y6)) {
                    squareCount++;
                }
            }
        }
        return squareCount / 4;
    }
}
三、运行结果

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

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

相关文章

Jedis和SpringDataRedis快速入门

Jedis快速入门 Jedis连接池 SpringDataRedis快速入门 序列化 引入SpringMVC就不用再引入这个依赖

华为配置交换机KPI信息上报分析器示例组网图形

配置交换机KPI信息上报分析器示例 组网图形 图1 KPI信息上报拓扑图 组网需求操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业网络用一台华为公司iMaster NCE-CampusInsight作为分析器对交换机设备进行智能运维管理。iMaster NCE-CampusInsight与交换机之间已经实现路由…

(2024,VLM,操纵链)CogCoM:训练大型视觉语言模型,通过操作链深入细节

CogCoM: Train Large Vision-Language Models Diving into Details through Chain of Manipulations 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1. 术语 2.2…

14 归并排序和其他排序

1.归并排序 2.计数排序 1. 归并排序 基本思想 建立在归并操作上的一种排序算法,采用分治法的一个典型应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;将两个有序表合成一个称为二路归并。 原数组无序&#xff0c;以中间分割为两个数组&#xff0c;…

Mysql进阶(sql优化和explain关键字)

一、为什么要对SQL进行优化&#xff1f; 由于业务数据量的增多&#xff0c;SQL的执行效率对程序的运行效率影响增大&#xff0c;此时就需要对SQL进行优化。 二、SQL优化的方法 1.查询sql尽量不要使用select * &#xff0c;而是具体字段。 节省资源&#xff0c;减少开销。 …

国际物流数字化运输方式选择指南 | 箱讯科技

国际物流涉及多种运输方式&#xff0c;每种方式都有其独特的优势和适用场景。选择合适的运输方式对于确保货物安全、及时到达目的地并控制成本至关重要。以下是对六种主要国际运输方式的简要介绍和选择建议&#xff1a; 国际快递&#xff1a;适用于小件、高价值或急需的货物。…

Response对象实现设置响应数据

1.设置响应数据功能 2.response设置重定向 重定向是一种资源跳转方式&#xff0c;类似于转发&#xff0c;但存在不同&#xff0c;转发是资源a处理了一部分&#xff0c;再跳转到资源b继续处理&#xff0c;最后响应。 实现方式一&#xff1a; resp.setStatus(302); resp.setHe…

力扣:42. 接雨水 84.柱状图中最大的矩形(单调栈,双指针)

这两道题解题思路类似&#xff0c;一个是单调递增栈&#xff0c;一个是单调递减栈。本篇博客给出暴力&#xff0c;双指针和单调栈解法。 42. 接雨水 题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后…

MQTT在linux下服务端和客户端的应用

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、开放标准的消息传输协议&#xff0c;设计用于受限设备和低带宽、不稳定网络的通信。 MQTT的一些关键特点和概念&#xff1a; 发布/订阅模型&#xff1a; MQTT采用发布/订阅&#xff08;Publ…

【typescript】特殊符号用法(?:)(??)(?.)(!)(!!)

一. 问号冒号&#xff08;?:&#xff09; 1.可以作为对象类型的可选属性&#xff0c;如&#xff1a; interface Person{name : string;age?: number; }const person1 : Person {name:"zien"} const person2 : Person {name:"sad", age:18} console.l…

【Unity】QFramework通用背包系统优化:使用Odin优化编辑器

前言 在学习凉鞋老师的课程《QFramework系统设计&#xff1a;通用背包系统》第四章时&#xff0c;笔者使用了Odin插件&#xff0c;对Item和ItemDatabase的SO文件进行了一些优化&#xff0c;使物品页面更加紧凑、更易拓展。 核心逻辑和功能没有改动&#xff0c;整体代码量减少…

蓝桥杯-求阶乘-python

问题描述 满足N!的末尾恰好有K个0的最小的N是多少&#xff1f; 如果这样的N不存在输出一1。 思路解析 末尾的0是由10产生的&#xff0c;而10是由质数2和5产生的 在求阶乘的过程中&#xff0c;只要是偶数就会有2&#xff0c;而5相对2更少&#xff0c;所以对于10的数量我们可以…

【分享】Word快捷键--Tab键的应用技巧

在使用word编辑文档时&#xff0c;想必大家一定经常用到【Tab】这个快捷键&#xff0c;今天来分享几个Tab键的应用技巧&#xff0c;这些技巧在文档排版中大有用处&#xff0c;可以大大提高我们的操作效率。 1.段首空两格 写文章时&#xff0c;只需按下【Tab】键就可以自动缩进…

Java串口通信技术探究2:RXTX库单例测试及应用

目录 一、创建串口工具类二、串口工具测试三、运行时会遇到的错误JVM崩溃无法找到指定的类 本文主要介绍了Java串口通信技术探究&#xff0c;重点分析了RXTX库单例测试以及串口工具的使用。通过实例演示了如何使用SerialPortTool类进行串口操作&#xff0c;包括打开串口、关闭串…

MySQL篇----第十一篇

系列文章目录 文章目录 系列文章目录前言一、BLOB 和 TEXT 有什么区别?二、MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?三、MyISAM 表格将在哪里存储,并且还提供其存储格式?四、MySQL 如何优化 DISTINCT?五、如何显示前 50 行?前言 前些天发现了一个巨牛的人…

ProtonMail邮箱怎么样?国内有什么替代品?

ProtonMail作为业界知名的加密邮箱提供者&#xff0c;其安全性、隐私保护等特性让不少追求私密通信的用户趋之若鹜。然而对于国内用户而言&#xff0c;ProtonMail可能并非最佳选择&#xff0c;受限于许多因素&#xff0c;从语言支持到服务器位置再到可访问性&#xff0c;都可能…

parse库,一个优雅的python库

前言 在Python中&#xff0c;format方法和f-strings是两种常用的字符串插值方法。 name "Haige" age "18" print(f"{name} is {age} years old.")# Haige is 18 years old.而如果是要从字符串中提取期望的值呢&#xff1f;相信很多人的第一或…

tkinter绘制组件(41)——菜单按钮

tkinter绘制组件&#xff08;41&#xff09;——菜单按钮 引言布局函数结构按钮部分菜单显示完整代码函数 效果测试代码最终效果 github项目pip下载结语 引言 TinUI5的新控件&#xff0c;菜单按钮&#xff0c;menubutton。 这是一个与TinUI菜单&#xff08;menubar&#xff0…

【C++】基础知识讲解(引用、内联、auto,基于范围for循环)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 引用 概念 特性 使用场景 作参数 作返回值 传值、传引用效率比较 引用和指针的区别 内联函数 概念…

excel 导出 The maximum length of cell contents (text) is 32767 characters

导出excel报错。错误日志提示&#xff1a;:The maximum length of cell contents (text) is 32767 characters 排查后&#xff0c;发现poi有单元格最大长度校验&#xff0c;超过32767会报错。 解决方案&#xff1a; 通过java反射机制&#xff0c;设置单元格最大校验限制为Int…