【编程测试题】保卫方案

2023-11-04

题目描述

战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都位于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。 一旦发生外地入侵事件,山顶上的岗哨将点燃烽烟,若两个岗哨所在的山峰之间没有更高的山峰遮挡且两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,任意两个小山之间存在两个不同的连接通路。满足上述不遮挡的条件下,一座山峰上岗哨点燃的烽烟至少可以通过一条通路被另一端观察到。对于任意相邻的岗哨,一端的岗哨一定可以发现一端点燃的烽烟。 小B设计的这种保卫方案的一个重要特性是能够观测到对方烽烟的岗哨对的数量,她希望你能够帮她解决这个问题。

输入描述:

输入中有多组测试数据,每一组测试数据的第一行为一个整数n(3<=n<=10^6),为首都周围的小山数量,第二行为n个整数,依次表示为小山的高度h(1<=h<=10^9).

输出描述:

对每组测试数据,在单独的一行中输出能相互观察到的岗哨的对数。

//AC代码:
#include<stdio.h>
#include<vector>
using namespace std;
struct node{
    long val,cnt;
    node(long val):val(val),cnt(1){}
};
int main(){
    int N,i,x,Maxi;
    //freopen("input.txt","r",stdin);
    while(scanf("%d",&N)!=EOF){
        vector<long> d(N);
        for(i=0;i<N;i++) scanf("%ld",&d[i]);
        vector<node> v;
        node tmp(d[0]);
        long Max=-1;
        for(i=1;i<N;i++)
            if(d[i]==d[i-1]) tmp.cnt++;
            else{
                v.push_back(tmp);
                if(Max<tmp.val){
                    Max=tmp.val;
                    Maxi=v.size()-1;
                }
                tmp.val=d[i];
                tmp.cnt=1;
            }
        v.push_back(tmp);
        if(Max<tmp.val){
            Max=tmp.val;
            Maxi=v.size()-1;
        }
        int n=0;
        long cnt=0;
        vector<node> stack;
        for(i=Maxi;n!=v.size();n++,i=(i+1)%v.size()){
            while(stack.size()&&v[i].val>stack[stack.size()-1].val){
                node &m=stack[stack.size()-1];
                cnt+=m.cnt+m.cnt*(m.cnt-1)/2;
                stack.pop_back();
                if(stack.size()) cnt+=m.cnt;
            }
            if(stack.size()){
                if(v[i].val==stack[stack.size()-1].val)
                    stack[stack.size()-1].cnt+=v[i].cnt;
                else
                    stack.push_back(v[i]);
            }else
                stack.push_back(v[i]);
        }
        while(stack.size()){
            node &m=stack[stack.size()-1];
            cnt+=m.cnt*(m.cnt-1)/2;
            stack.pop_back();
            if(stack.size()) cnt+=2*m.cnt;
            if(stack.size()==1&&stack[stack.size()-1].cnt==1) cnt-=m.cnt;
        }
        printf("%ld\n",cnt);
    }
}
//这是左程云老师的思路   我动手实现了一下  应该是最优解  时间复杂度O(N)   用单调栈

来源:元气の悟空  https://www.nowcoder.com/profile/8981135/codeBookDetail?submissionId=18711813

另外参考: https://blog.csdn.net/jklongint/article/details/52455770

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【编程测试题】保卫方案 的相关文章

  • python3排序 sorted(key=lambda)

    python3排序sorted key lambda 当待排序列表的元素由多字段构成时 我们可以通过sorted iterable key reverse 的参数key来制定我们根据那个字段对列表元素进行排序 key lambda 元素 元
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • StringBuilder.append()与String的"+"的效率PK

    如果String通过 来拼接 如果拼接的字符串是常量 则效率会非常高 因为会进行编译时优化 这个时候StringBuilder的append 是达不到的 如果将String的 放在循环中 会创建很多的StringBuilder对象 并且执行
  • 信贷风控中Vintage、滚动率、迁移率的理解

    风控业务背景 信贷风险管理是一门艺术 更是一门科学 资产质量分析中常会涉及到三个理论 账龄分析 Vintage Analysis 用以分析账户成熟期 变化规律等 滚动率分析 Roll Rate Analysis 用以定义账户好坏程度 迁移率
  • 未解决,fsmgmt.msc共享文件夹管理中,文件夹无属性选项

    之前用的win10家庭版 都没有fsmgmt msc 现在升级成专业版发现没有属性 https jingyan baidu com article 358570f69e9b13ce4724fce9 html 我的电脑

随机推荐

  • windows下redis设置redis开机自启动方法

    1 查看一下Redis服务是否注册 1 Win R快捷键输入services msc 然后回车或者点击确定 2 win10桌面 此电脑 右键单击 管理 gt 服务与应用程序 gt 服务 此处输入R 即可看到R开头的服务列表 在没有添加服务的
  • IDEA+Springboot+Git+jenkins+tomcat实现自动部署-基本流程

    jenkins构建 前言 测试项目准备 一 jenkins构建一个新项目 把Gitee仓库的项目获取到本地打包运行 二 jenkins构建一个新项目 把Gitee仓库的项目获取到本地打包 通过Publish Over SSH传输到另外一台机
  • 《在IDEA中配置MySQL的驱动程序》

    一 下载mysql connecter 下载地址 http dev mysql com downloads connector j 具体步骤已在下图中标注 注意是下载zip压缩包格式 因为解压缩安装很方便 下载完成后得到压缩包如下 二 安装
  • 深度详解ResNet到底在解决一个什么问题?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 https www zhihu com question 64494691 本文仅作为学术分享 如果侵权 会删文处理 最近看到不少ResNet的变体 比如ResNeSt
  • 【软考】-高项-整合管理-重要知识点思维导图

    整合管理 文章目录 整合管理 含义 内容 项目管理计划 含义 组件 开工 会议 分类 目的作用 如何召开高效会议 批准的变更请求 可交付成果 工作绩效数据 变更的流程 1 提出与记录变更申请 2 初审变更 初审目的 常见方式为变更申请文档的
  • 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    Mask R CNN是ICCV 2017的best paper 彰显了机器学习计算机视觉领域在2017年的最新成果 在机器学习2017年的最新发展中 单任务的网络结构已经逐渐不再引人瞩目 取而代之的是集成 复杂 一石多鸟的多任务网络模型 M
  • React黑马视频自学笔记02

    14 react事件处理 14 1事件绑定 语法 on 事件名称 事件处理程序 比如 onClick gt 注意 React事件采用驼峰命名法 比如 onMouseEnter onFocus 函数组件绑定事件的时候不用this 14 2事件
  • 监控Oracle(oracledb_exporter)

    我们以监控Oracle为例 目前仅有x86版本 可以下载源码针对不同环境使用golang环境自己编译 监控什么指标下载对应系统的exporter插件 统一下载地址 https prometheus io download 监控指标对应的gr
  • 解决实际问题的ES6代码段

    1 如何隐藏所有指定元素 const hide el gt el forEach e gt e style display none Example hide document querySelectorAll img 隐藏页面上的所有 元
  • Ubuntu搭建Qt环境

    1 ubuntu搭建qt环境的好处 ubuntu上可以安装qtcrater 然后一键下载到板子上 不需要手动编译 2 安装linux版本的qtcreater 注意 必须要先安装g 再安装qtcreater 否则会出问题 下载g 编译器 su
  • html实现文字滚动

    要在HTML中实现文字滚动 您可以使用
  • Python实现串口通信(pyserial)

    Python实现串口通信 pyserial pyserial模块封装了对串口的访问 兼容各种平台 安装 pip insatll pyserial 初始化 简单初始化示例 import serial ser serial Serial com
  • MySQL数据同步ES的4种方法,你能想到几种?

    大家好 我是老三 这期给大家分享一个电商中常见的场景 MySQL数据同步Elasticsearch 大家应该都在各种电商网站检索过商品 那么检索商品一般都是通过什么实现呢 搜索引擎Elasticsearch 那么问题来了 商品上架 数据一般
  • python爬虫系列1--方案概述

    爬虫技能树 爬虫进阶必须 http www yeayee com article 6569383 1 html 0 requests 模块 beautifulsoup模块 css选择器语法 re正则模块 http头编写 cookies js
  • Ansible自动化运维_超详细

    Ansible自动化运维 自动化运维工具简介 Puppet 自动运维工具特点 Saltstack 自动运维工具特点 Ansible 自动运维工具特点 Ansible 运维工具原理 Ansible 管理工具安装配置 Ansible 工具参数详
  • FastJson解析继承/解析多态/反序列化去解析json

    我这个是在和外围系统调用时用到的 所以我不可能让他们去改返回的报文内容 也就是有的方法里说用SerializerFeature WriteClassName 定义一个interface或者class 其实都一样 public interfa
  • vi 编辑器总结

    创建文件 vi 一 进入vi的命令 vi filename 打开或新建文件 并将光标置于第一行首 vi n filename 打开文件 并将光标置于第n行首 vi filename 打开文件 并将光标置于最后一行首 vi pattern f
  • springboot-2.3.x最新版源码阅读环境搭建-基于gradle构建(全网首发)

    springboot 2 3 x最新版源码阅读环境搭建 基于gradle构建 全网首发 文章目录 springboot 2 3 x最新版源码阅读环境搭建 基于gradle构建 全网首发 一 前言 二 环境准备 三 下载源码 四 开始构建 五
  • 堆排序详解

    堆排序是必须要会手写的 背景介绍 堆是一种非线性数据结构 大顶堆 每个结点的值都大于或等于其左右孩子结点的值 小顶堆 每个结点的值都小于或等于其左右孩子结点的值 原理 1 从最后一个非叶子结点开始 从左到右 从上到下 与父节点进行交换 构建
  • 【编程测试题】保卫方案

    题目描述 战争游戏的至关重要环节就要到来了 这次的结果将决定王国的生死存亡 小B负责首都的防卫工作 首都位于一个四面环山的盆地中 周围的n个小山构成一个环 作为预警措施 小B计划在每个小山上设置一个观察哨 日夜不停的瞭望周围发生的情况 一旦