51nod 1276 岛屿的数量

基于STM32L4XX、HAL库的MMA8452QR1姿态传感器驱动程序设计 / HAL库需要左移1位。#define MMA8452Q_I2C_ADDRESS 0x1D // SA0=1时的地址。* @param range: 量程(MMA8452Q_RANGE_2G/4G/8G)* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。 阅读详情

题目来源:  Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 20  难度:3级算法题
 收藏
 关注
有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。
给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如:
岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。
当海面高度为0时,所有的岛形成了1个岛屿。
当海面高度为1时,岛1会被淹没,总共有2个岛屿{2} {3, 2, 3}。
当海面高度为3时,所有岛都会被淹没,总共0个岛屿。
当海面高度为2时,岛0, 1, 3会被淹没,总共有2个岛屿{3} {3}。
Input
第1行:2个数N, Q中间用空格分隔,其中N为岛的数量,Q为查询的数量(1 <= N, Q <= 50000)。
第2 - N + 1行,每行1个数,对应N个岛屿的高度(1 <= A[i] <= 10^9)。
第N + 2 - N + Q + 1行,每行一个数,对应查询的海平面高度(1 <= Q[i] <= 10^9)。
Output
输出共Q行,对应每个查询的岛屿数量。
Input示例
5 4
2
1
3
2
3
0
1
3
2
Output示例
1
2
0
2




思路:


1、暴力处理O(nm)肯定不行,那么考虑对其进行优化:

①首先我们对山峰的高度进行从小到大排序,当然我们同时留一个索引(输入的时候a【i】.pos=i)用来记录原来的位子。.

②然后我们对询问的水平线的高度进行从小到大排序,当然我们同事也留一个索引,用来记录原来的位子。

③对于当前询问的水平线高度,我们对应将比这个高度低的山峰高度全部置为0.(因为进行了排序,那么我们这里处理会非常方便)

④同时我们对这些山峰进行处理的时候处理两种情况:第一种就是多了一片岛屿,第二种就是少了一片岛屿,对应第一种情况,如果当前去掉的这个山峰的两边都是山峰,那么才能多一片岛屿,对于第二种情况,如果当前去掉的这个山峰的两边都是水了,我们才能少了一片岛屿。之前排序的时候我们保留了索引,所以这里的处理也是非常简单的。

⑤对应将所有询问都处理完毕之后,统一输出即可。






#include<bits/stdc++.h>
using namespace std;
struct node
{
    int a,b;
} q[50005],p[50005];
int cmp(node x,node y)
{
    return x.a<y.a;
}
int cmp1(node x,node y)
{
    return x.b<y.b;
}
int main()
{
    int m,n;
    int temp[50005];
    while(cin>>m>>n)
    {
        memset(temp,0,sizeof(temp));
        for(int i=0; i<m; i++)
        {
            cin>>q[i].a;
            q[i].b=i;
        }
        for(int i=0; i<n; i++)
        {
            cin>>p[i].a;
            p[i].b=i;
        }
        sort(q,q+m,cmp);
        sort(p,p+n,cmp);
        int sum=1;
        int j=0;
        for(int i=0; i<n; i++)
        {
            while(q[j].a<=p[i].a&&j<m)
            {
                if(q[j].b==0)
                {
                    if(temp[1]==1)
                        sum--;
                }
                if(q[j].b==m-1)
                {
                    if(temp[m-2]==1)
                        sum--;
                }
                else
                {
                    if(temp[q[j].b-1]==0&&temp[q[j].b+1]==0)
                        sum++;
                    if(temp[q[j].b-1]==1&&temp[q[j].b+1]==1)
                        sum--;
                }
                temp[q[j].b]=1;
                j++;
            }
            p[i].a=sum;
        }
        sort(p,p+n,cmp1);
        for(int i=0; i<n; i++)
            cout<<p[i].a<<endl;
    }
    return 0;
}




思路:


1、暴力处理O(nm)肯定不行,那么考虑对其进行优化:

①首先我们对山峰的高度进行从小到大排序,当然我们同时留一个索引(输入的时候a【i】.pos=i)用来记录原来的位子。.

②然后我们对询问的水平线的高度进行从小到大排序,当然我们同事也留一个索引,用来记录原来的位子。

③对于当前询问的水平线高度,我们对应将比这个高度低的山峰高度全部置为0.(因为进行了排序,那么我们这里处理会非常方便)

④同时我们对这些山峰进行处理的时候处理两种情况:第一种就是多了一片岛屿,第二种就是少了一片岛屿,对应第一种情况,如果当前去掉的这个山峰的两边都是山峰,那么才能多一片岛屿,对于第二种情况,如果当前去掉的这个山峰的两边都是水了,我们才能少了一片岛屿。之前排序的时候我们保留了索引,所以这里的处理也是非常简单的。

⑤对应将所有询问都处理完毕之后,统一输出即可。


2、题目还是很有趣的~


什么是 SAP Fiori 的 Technical Catalog 笔者之前的文章曾经提到一个叫做本文介绍 Technical Catalog 这个概念在 SAP Fiori 技术体系中的作用。首先我们如何在系统里查看这个 Catalog SAP_BASIS_TCR_T 里面包含的内容呢?如果大家照着本文开头那篇文章里提到的步骤,那么在自己系统里会创建好名叫的 PFCG role.我们登录 ABAP 系统,启动事务码 PFCG,打开这个 role, 就能看到它。展开之后,发现它扮演着一个容器的角色,里面包含了很多 ABAP 对象。 阅读详情

相关推荐

动力锂电池-二阶RC模型等效电路-RLS参数辨识-Simulink

1.锂电池二阶RC等效电路模型

QQ1978009424的博客 1万+

【洛谷 P8662】[蓝桥杯 2018 省 AB] 全球变暖 题解(深度优先搜索+位集合)

你有一张某海域N×N像素的照片,表示海洋、其中 “上下左右” 四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

HEX9CF的技术博客 1241

VMFS数据存储(datastore)丢失后恢复步骤

vmfs datastore恢复步骤

jetliu05的博客 3267

51NOD 1276 岛屿的数量

1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H

LuRiCheng的博客 470

C++动态规划详解

动态规划思想 一、动态规划概念: 动态规划(dp)是研究多步决策过程最优化问题的一种数学方法。在动态规划中,为了寻找一个问题的最优解(即最优决策过程),将整个问题划分成若干个相应的阶段,并在每个阶段都根据先前所作出的决策作出当前阶段最优决策,进而得出整个问题的最优解。即记住已知问题的答案,在已知的答案的基础上解决未知的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后

weixin_51951103的博客 2万+

【Python机器学习】决策树与随机森林:解释性与鲁棒性的平衡

本文深入探讨了决策树和随机森林在解释性与鲁棒性之间的权衡。决策树以其完美的可解释性、快速的推理速度和无需特征标准化等优势,在许多场景中仍然是首选算法。一个经过合理剪枝的决策树,其每个决策路径都可以转化为业务规则,这在金融风控、医疗诊断等对透明度有严格要求的领域无可替代。然而,单棵决策树的高方差和容易过拟合的特性限制了其泛化能力。随机森林通过集成学习的思想,巧妙地解决了这个矛盾。它维持了相对较好的解释性(通过特征重要性、OOB估计等方式),同时通过多棵树的投票或平均,大幅降低了模型的方差。

nmdbbzcl的博客 626

51nod 1276 岛屿的数量(锻炼思维的好题)

有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。 当海面高度为0时,所有的

ACway的专栏 4641

OMAPL138使用UPP读写测试

UPP测试代码 #include "hw_types.h" // 宏命令 #include "hw_syscfg0_OMAPL138.h" // 系统配置模块寄存器 #include "soc_OMAPL138.h" // DSP C6748 外设寄存器 #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明 #include "interrupt.h" // DSP C6748 中断相关应用程序接...

wangjie36的博客 1193

岛屿的数量 51Nod - 1276(思维+贪心+单调)

有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。 当海面高度为0时,所有的

w571523631的博客 455

微信小程序 - 最新详细实现“全局实时监听页面发生跳转“ 当页面跳转后立即捕捉并触发某个操作或调用处理函数,小程序整个项目无时无刻只要路由发生变化改变了就能监听,时刻检测页面URL变化(获取路由数据)

微信小程序,vue2,vue3,监听路由,如何监听路由发生变化,如何watch监听路由,怎么全局监听页面发生变化,实现当页面路由发生变化时执行一个函数,当路由变化时执行一些操作执行一段代码,怎么监听路由变化时触发一个函数,监听页面变化,页面间的跳转如何监听,页面跳转时怎么拿到路由及参数,页面路由变化时拿到参数和url,使用watch监听路由变化,页面跳转后怎么触发事件,怎么监听页面跳转,监听页面跳转并拿到路由url路径,小程序怎么全局定义一个专门监听路由的函数,小程序怎么无时无刻实时监听路由页面跳转,监听当

🏆 前端领域优质创作者 4476

微信小程序:errno: 1500104, errCode: 10008, errMsg: “writeBLECharacteristicValue:fail:system error, status

微信小程序errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOWN (239)"微信小程序调用蓝牙API,wx.writeBLECharacteristicValue()报错,微信小程序蓝牙写入错误,在开发uniapp微信小程序蓝牙通信功能时报错,蓝牙开发设备控制核心api,微信小程序调用蓝牙API “wx.writeBLECharacteristicValu

✅ 精选推荐文章 3930

51NOD 1276 岛屿的数量(脑洞 + 思维)

传送门 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。 当海面高度为0时

代码改变世界 2344

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

51Nod_1276 岛屿的数量【思维】

                                       51Nod_1276 岛屿的数量                                 http://www.51nod.com/Challenge/Problem.html#!#problemId=1276     题目 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛...

逐梦者 322

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

51nod 1276 岛屿的数量 思维题,很棒的题目

传送门:51nod 1276题目大意:由于是中文题就不再描述了。Input示例5 4 2 1 3 2 3 0 1 3 2Output示例1 2 0 2思路:第一思路肯定是暴力的方法,每次询问都去查询被淹没的岛屿和不相连的岛屿数,这样的时间复杂度是O(n)*O(q),会超时。网上的思路一般都是离线处理,也就是说针对每个询问不立刻给出答案,而是等询问全部给出后一起给出答案。由于水会先淹没高度低的岛屿,...

zuzhiang的博客 663

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

51Nod-1276-岛屿的数量

51Nod-1276- 岛屿的数量 1276岛屿的数量 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1...

weixin_30652879的博客 87

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

51nod-【1276 岛屿的数量】

1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然

有梦的博客 410

51Nod - 1276 岛屿数量

真的不难这个题,不需要算法 想到用结构体对高度排序,记录位置就不难了,但是 更重要的是 注意后续计算岛屿数量 我就是在计算数量的时候很sb,没有想清楚,写了以后,一点一点的改,虽然最后改对了,但是很费时间。。。当然最后真的是参考了AC代码才想到哪里有问题的 #include #include #include #include using namespace std; const int m

床前明月光 433

51nod1276岛屿的数量

有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。 当海面高度为0时,所有的...

qq_40859951的博客 140

51nod 1276 岛屿的数量 思维好题

1276 岛屿的数量 1.0 秒 131,072.0 KB 20 分 3级题 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的...

pxlsdz的博客 594

51Nod-1276-岛屿的数量

ACM模版描述题解先将岛屿和指令全部排序,然后过一遍指令,不断修正岛屿状态,将每条指令的结果转存一下,最后整体输出即可。复杂度Qlog(Q) + Nlog(N)……代码#include <iostream> #include <algorithm> #include <cstring> #include <cstdio>using namespace std;const int MAXN = 5e4

逐梦者 670

51nod 1276 岛屿的数量 By Assassin

有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一个海平面的高度H,问当海平面高度达到H时,海上共有多少个岛屿。例如: 岛屿的高度为:{2, 1, 3, 2, 3}, 查询为:{0, 1, 3, 2}。 当海面高度为0时,所有的岛

Assassin 466

51nod 1276 岛屿的数量 (离散化)

给出nnn个岛屿的高度,询问qqq个海平面,每个海平面时存在多少岛屿。 对询问和岛屿分别离散化,对于每一个询问,他之前的询问一定把更矮的岛给覆盖了,所以对于一个询问,覆盖当前没覆盖的岛对答案的影响分两种:1、在原序列中这个岛两边的岛都没被覆盖过,那么答案+1;2、在原序列中这个岛两边都被覆盖过了,那么答案被多加了1,所以答案-1。 #include<iostream> #include...

侯山窝矿工 233

51nod 1276 岛屿的数量【思维】好题~

1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 有N个岛连在一起形成了一个大的岛屿,如果海平面上升超过某些岛的高度时,则这个岛会被淹没。原本的大岛屿则会分为多个小岛屿,如果海平面一直上升,则所有岛都会被淹没在水下。 给出N个岛的高度。然后有Q个查询,每个查询给出一

mengxiang000000 925
上一篇: 洛谷 P3708 koishi的数学题
下一篇: 蓝桥杯 算法训练:表达式计算 中缀表达式变后缀表达式
DOLEAM
博客等级 码龄11年 9粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值