百度之星(夏日漫步)

2023-09-17 09:26:30

夏日夜晚,小度看着庭院中长长的走廊,萌发出想要在上面散步的欲望,小度注意到月光透过树荫落在地砖上,并且由于树荫的遮蔽度不通,所以月光的亮度不同,为了直观地看到每个格子的亮度,小度用了一些自然数来表示它们的亮度。亮度越高则数字越大,亮度相同的数字相同。

走廊是只有一行地砖的直走廊。上面一共有 n 个格子,每个格子都被小度给予了一个数字 ai​ 来表示它的亮度。

小度现在站在 11 号格子,想要去到 n 号格子。小度可以正向或反向移动到相邻的格子,每次需要花费 11 的体力。

同时小度还有瞬移的能力,其可以花费 11 的体力来瞬移到与当前格子亮度相同的格子上。而且由于小度视野有限,只能瞬移到在当前格子后的第一次亮度相同的格子上。这也意味着不能反向瞬移

小度想知道,到达 n 号格子需要花费的最小体力是多少。以此制定一个最优秀的散步方案。

格式

输入格式:

第一行一个整数 n ,表示走廊上一共有 n 个格子。 1≤n≤2∗10^5 , 0≤ai​≤1∗10^6;
第二行 n 个整数,为自然数 ai​ 表示第 i 号格子的亮度。

#include<bits/stdc++.h> 

using namespace std;
const int maxn=2e5+5;
int n;
int a[maxn];
int id[maxn];
int ne[maxn];
int d[maxn];

int bfs(int s){
    queue<int> Q; Q.push(s);
    for(int i=0;i<n;i++){
        d[i]=0x3fffffff;
    }
    d[s]=0;
    while(!Q.empty()){
        int cur=Q.front();Q.pop();
        if(cur==n-1) break;
        //往前走
        if(cur-1>=0&&d[cur]+1<d[cur-1]){
            Q.push(cur-1);
            d[cur-1]=d[cur]+1;
        }
        //往后走
        if(cur-1<n&&d[cur]+1<d[cur+1]){
            Q.push(cur+1);
            d[cur+1]=d[cur]+1;
        }
        //正向瞬移
        if(ne[cur]!=0&&d[cur]+1<d[ne[cur]]){
            Q.push(ne[cur]);
            d[ne[cur]]=d[cur]+1;
        }
        return d[n-1];
    }
}
int main( )
{

    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
        idx[i]=i;
    }
    //稳定排序,在数字相同的时候保持下标递增
    stable_sort(idx,idx+n,[](int x,int y)){ return a[x]<a[y];}
    for(int i=0;i<n-1;i++){
        if(a[idx[i]]==a[idx[i+1]]){
            ne[idx[i]]=idx[i+1];
        }
    }
    return 0;
}

 

更多推荐

STM32WB55开发(4)----配置串口打印Debug调试信息

STM32WB55开发----4.配置串口打印Debug调试信息概述硬件准备视频教学样品申请源码下载选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙开启串口调试配置蓝牙参数设置工程信息工程文件设置Keil工程配置代码配置结果演示概述在STM

STM32WB55开发(2)----修改蓝牙地址

STM32WB55开发----2.修改蓝牙地址概述硬件准备视频教学样品申请完整代码下载选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙设置工程信息工程文件设置修改置BLE设备公共地址Ble_Hci_Gap_Gatt_Init结果演示概述在嵌

【STM32】驱动库的选择:CMSIS Driver、SPL、HAL、LL | 在ARM MDK、STM32Cube中如何选择?

阅读本专栏其他文章,有助于理解本文。👆文章目录一、开发库选择1.1概述1.2CMSISpack1.3SPL库1.4HAL库1.5LL库1.6寄存器开发二、代码对比2.1使用寄存器2.2使用CMSIS库2.3使用SPL库2.4使用HAL库2.5使用LL库2.6使用RTOS三、如何在软件中选择不同的库3.1ARMMDK3

Spring Boot自动装配原理

简介SpringBoot是一个开源的Java框架,旨在简化Spring应用程序的搭建和开发。它通过自动装配的机制,大大减少了繁琐的配置工作,提高了开发效率。本文将深入探讨SpringBoot的自动装配原理。自动装配的概述在传统的Spring框架中,我们需要手动配置各种组件和依赖关系。而SpringBoot则通过自动扫描

基于微信小程序的高校就业招聘系统设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

c++Flood Fill算法之池塘计数,城堡问题,山峰与山谷(acwing)

FloodFill算法有很多应用场景,以下是一些常见的应用场景:1.图像处理:在图像处理中,我们通常需要对图像的某一个区域进行涂色、填充、描边等操作,FloodFill算法就可以用来实现这些操作。2.游戏开发:在游戏中,FloodFill算法可以用来实现区域填充、地图探索、迷宫求解等功能。3.自动化绘制:FloodFi

如何用ate自动测试设备对DC-DC电源模块负载调整率进行测试?

电源模块负载调整率测试是功能测试之一,是电源模块非常重要的一项指标,它的大小直接影响着电源模块的整体质量。因此使用ate自动测试设备对DC-DC电源模块负载调整率进行测试是制造生产过程中至关重要的一环。电源模块负载调整率计算公式:负载调整率=(满载输出电压-空载输出电压)/额定输出电压*100%测量电源模块的负载调整率

解决高并发问题

在处理项目中的高并发问题时,可以采取以下几种方法:后端处理:大部分的高并发处理是在后端进行的。可以通过优化数据库查询、增加缓存机制(如集成Redis)、使用分布式技术(如分布式缓存、分布式锁)、使用消息队列等方式来提高系统的并发处理能力。此外,还可以通过水平扩展(增加服务器数量)或垂直扩展(增加服务器的硬件配置)来提高

Kafka【命令行操作】

Kafka命令行操作Kafka主要包括三大部分:生产者、主题分区节点、消费者。1、Topic命令行操作也就是我们kafka下的脚本kafka-topics.sh的相关操作。常用命令行操作参数描述--bootstrap-server<String:servertoconnectto>连接的KafkaBroker主机名称和

【Android Framework系列】第15章 Fragment+ViewPager与Viewpager2相关原理

1前言上一章节【AndroidFramework系列】第14章Fragment核心原理(AndroidX版本)我们学习了Fragment的核心原理,本章节学习常用的Fragment+ViewPager以及Fragment+ViewPager2的相关使用和一些基本的源码分析。2Fragment+ViewPager我们常用

腾讯mini项目-【指标监控服务重构】2023-07-19

今日已办OpenTelemetryLogs通过日志记录API支持日志收集集成现有的日志记录库和日志收集工具Overview日志记录API-LoggingAPI,允许您检测应用程序并生成结构化日志旨在与其他telemertydata(例如metric和trace)配合使用,以提供统一的可观测性解决方案结构化日志记录,允许

热文推荐