PA3题解报告——灯塔(LightHouse)

数据结构与算法实验2020夏第二批(中国石油大学)
PA3题解报告——灯塔(LightHouse)

目录

  1. 题目描述
  2. 题目分析
  3. 编码实现

一、题目描述

1. 描述

海上有许多灯塔,为过路船只照明。
图一
如图一所示,每个灯塔都配有一盏探照灯,照亮其东北、西南两个对顶的直角区域。探照灯的功率之大,足以覆盖任何距离。灯塔本身是如此之小,可以假定它们不会彼此遮挡。
图二
若灯塔A、B均在对方的照亮范围内,则称它们能够照亮彼此。比如在图二的实例中,蓝、红灯塔可照亮彼此,蓝、绿灯塔则不是,红、绿灯塔也不是。
现在,对于任何一组给定的灯塔,请计算出其中有多少对灯塔能够照亮彼此。

2. 输入

共n+1行。
第1行为1个整数n,表示灯塔的总数。
第2到n+1行每行包含2个整数x, y,分别表示各灯塔的横、纵坐标。

3. 输出

1个整数,表示可照亮彼此的灯塔对的数量。

4. 例
//输入
3
2 2
4 3
5 1

//输出
1
5. 限制

对于90%的测例:1 ≤ n ≤ 3×105
对于95%的测例:1 ≤ n ≤ 106
全部测例:1 ≤ n ≤ 4×106
灯塔的坐标x, y是整数,且不同灯塔的x, y坐标均互异
1 ≤ x, y ≤ 10^8
时间:2 sec
内存:256 MB

6. 提示

注意机器中整型变量的范围,C/C++中的int类型通常被编译成32位整数,其范围为[-2^31, 2^31 - 1],不一定足够容纳本题的输出。

二、题目分析

1. 方法一【暴力法】

代码实现

暴力法很简单,首先读入所有灯塔的坐标,从头开始遍历,对于两个灯塔坐标(x1,y1)(x2,y2),如果满足(x1-x2)(y1-y2)>0,则两个灯塔均在对方的照亮范围内。

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)
2. 方法二【归并排序】

代码实现

因为不同灯塔的x, y坐标均互异,A和B能够相互照亮的条件就是B在A的右上方或者A在B的右上方。
所以我们就只要我们首先将所有点按照x坐标排序,接下来在y坐标中统计所有“非逆序对”再求和就可以了。
而问题的关键就在于在这样的数据规模下如何快速的统计出“顺序对”的个数。
如果只是单纯的O(n^2)的算法显然是效率不够的(因为我得了50分),而归并排序可以将原问题一分为二的递归下去,最后只将左右两个有序的区间合并起来即可,同时在合并的过程中似乎我们就可以顺便统计“顺序对”的个数。

复杂度分析:

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
  • 空间复杂度:
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
“区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网彻底改变了信息传递的方式,那么区块链作为构造信任的机器,将可能彻底改变整个人类社会价值传递的方式。” 背景:区块链技术已然成为全球关注的焦点,在投资机构的热捧下,各个领域也纷纷布局、试水区块链。与此同时,我国虽然是保险大国,但传统保险数据信息难以共享、数据安全难以保证、信任缺失等问题仍亟待解决。而具有对应的去中心化、不可篡改、公开透明可溯源三大特征的的区块链技术正在飞速发展,或许能为传统保险提供创新性的解决方案。 方法:在上述背景下,Lighthouse互联网实验室基于自身对互联网长期观察获得的专业知识,通过案头研究(Desk Research)的方式,对区块链技术、保险业以及国内区块链与保险的动态进行盘点分析,明确此次研究的主体“区块链”的概念内涵及运用趋势;根据传统保险产品设计流程,从产品设计开发、产品定价、渠道销售、理赔服务、技术系统设计五大环节中所对应的信任成本过高、数据的缺失等痛点详细全面地提出了区块链解决方案,并对目前行业内的“区块链+保险”产品进行了深入全面的剖析,同时在此基础上预测区块链+保险未来的发展趋势。 效果:本报告旨在为保险行业的高级管理人员收集整理最新、最全面的“区块链+保险”动态的同时,提供相关问题的解决方案以及典型案例,本报告亦希望可以为想要了解区块链知识的从业者提供思路。如若需要进一步的培训和咨询服务,请与Lighthouse互联网实验室联系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值