第十届蓝桥杯真题-灵能传输

2023-11-08

题目

请添加图片描述
请添加图片描述

OJ

https://www.lanqiao.cn/problems/196/learning/

考点

前缀和、贪心

思路

题目意思就是希望通过灵能交换后使得不稳定度最小,假设对a[i]进行灵能传输,可以发现前缀和s[i-1]和s[i]进行了交换。(不要问我怎么发现的,我一开始也没发现)拿草稿纸很快就能证明。
发现的现象:对i灵能传输,就会交换i-1、i的前缀和
也就是说现在可以任意对第1到第n-1个的前缀和进行交换(为什么不是0-n ?因为只能对2~n-1进行灵能交换)
现在稳定度最小也就变为了相邻前缀和最大差的最小化。
假设没有限制,那么按照数的大小进行排序就可以得到解
证明:

  1. 理论法:如果相邻前缀和差小,那么对于第i个前缀和的邻居i-1、i+1,都是相比其他前缀和最接近的。也就是说没有人可以在中间横插一脚,可以把这个过程看作排序算法中的插入排序,直到无法横插一脚为止。
  2. 画图:
    请添加图片描述
    但是注意到:第一个前缀和s[0]和最后一个前缀和s[n]无法交换,且相对大小关系不确定,所以要在上面的方案进行改进。
    我们可以选择隔几个选一个然后折返,由贪心可知隔一个选一个最优,这时面临先min还是先max的问题
    手动画图证明如下
    请添加图片描述
    当然还有第三种情况,s0 == sn,这个时候其实先min或者先max都一样。
    上面的两种情况最后可以合并为一种,第二种情况sn<s0,直接交换两者即可(反正是求差的绝对值)
    隔一个选一个,可以使用一个等长的数组进行标记是否已经取过了。

特殊情况讨论

  • 存在元素和s0、sn相等选哪个作为起点终点?
    手动证明可以发现,其实选哪个都一样,结果相同
  • s0 == sn时 到底选哪个位置?
    其实位置一样都可以(具体看代码怎么写,但是不建议s0和sn的位置是同一个)
    查找index都是从前往后找:可以判断 s0是否和sn相等,如果相等sn的index直接加一
    最优解决方法:s0的index从前往后找,sn的index从后往前找

代码

写的for有点多,但是更好理解。

t = int(input())
for i in range(t):
    n = int(input())
    a = [0]+list(map(int,input().split()))
    b = [0]*(n+1)
    ## 建立前缀和
    for i in range(1,n+1):
        b[i] = b[i-1]+a[i]
    s0 = min(0,b[n])
    sn = max(0,b[n])
    b.sort()
    s0index = b.index(s0)
    snindex = b.index(sn)
    ## 避免特殊情况 s0 == sn使得min到max这段出错
    if s0index == snindex:
        snindex += 1
    c = []
    ## flag 标记是否取过
    flag = [0]*(n+1)
    ## 标记s0到min
    for i in range(s0index,-1,-2):
        flag[i] = 1
    ## 标记sn到max
    for i in range(snindex,n+1,2):
        flag[i] = 1
    ## 插入s0到min这一段
    for i in range(s0index,-1,-1):
        if flag[i] == 1:
            c.append(b[i])
    ## 插入min到max这一段
    for i in range(n+1):
        if flag[i] == 0:
            c.append(b[i])
    ## 插入max到sn这一段
    for i in range(n,snindex-1,-1):
        if flag[i] == 1:
            c.append(b[i])
    ans = 0
    ## 计算不稳定度
    for i in range(1,n+1):
        if abs(c[i]-c[i-1]) > ans:
            ans = abs(c[i]-c[i-1])
    print(ans)

不愧是压轴题,这25分不好拿。

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

第十届蓝桥杯真题-灵能传输 的相关文章

  • 如何将one-hot向量转换为多标签?

    我有一项多分类任务 并且我得到了像这样的单热类型预测 0 1 1 0 1 0 1 0 1 我希望将这个单热向量转换为标签 例如 1 2 1 0 2 我已经尝试过 tf argmax 但它不起作用 那么我该如何处理呢 使用列表理解 oheLi
  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • Python3+Kivy+Plyer 推送通知图标问题

    我在使用 Android 的简单通知测试应用程序时遇到了一个奇怪的错误 错误 python AttributeError type object notification org notificator R drawable has no
  • 在 python 的 Visual Studio 工具中按下 ctrl+F5 后,控制台窗口立即关闭

    我已经安装了 Visual Studio 的 Python 工具 但在控制台窗口中看不到输出 就像我在 Visual Studio 中运行 C 控制台应用程序时按以下快捷键时看到的输出一样 F5 开始调试程序并关闭 C 和 Python 中
  • 在 python 2 和 3 的spyder之间切换

    根据我在文档中了解到的内容 它指出您只需使用命令提示符创建一个新变量即可轻松在 2 个 python 环境之间切换 如果我已经安装了 python 2 7 则 conda create n python34 python 3 4 anaco
  • 如何 json_normalize() df 中的特定字段并保留其他列? [复制]

    这个问题在这里已经有答案了 这是我的简单示例 我的实际数据集中的 json 字段非常嵌套 因此我一次解压一层 我需要在 json normalize 之后保留数据集上的某些列 https pandas pydata org docs ref
  • 无法安装时间模块

    我试过了pip install time and sudo H pip install time 但我不断收到错误 找不到满足要求时间的版本 从 版本 未找到时间匹配的发行版 我正在 PyCharm 中工作 但真正没有意义的是我可以在 Py
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 在 Windows 上将 Word2vec 与 Tensorflow 结合使用

    In 本教程文件 https github com tensorflow models blob master tutorials embedding word2vec py L45通过 Tensorflow 找到以下行 第 45 行 来加
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 这可能是因为 cuDNN 初始化失败,因此请尝试查看上面是否打印了警告日志消息。 [操作:Conv2D]

    我在 anaconda 中安装了 TensorFlow GPU 2 0 当我安装它并导入包 然后运行我的 CNN 模型时 它工作正常 但当我尝试运行训练模型时 出现错误 这是我的错误报告 Epoch 1 50 UnknownError Tr
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • 从 Apache 运行 python 脚本的最简单方法

    我花了很长时间试图弄清楚这一点 我基本上正在尝试开发一个网站 当用户单击特定按钮时 我必须在其中执行 python 脚本 在研究了 Stack Overflow 和 Google 之后 我需要配置 Apache 以便能够运行 CGI 脚本
  • PermanentTaskFailure:“模块”对象没有属性“迁移”

    我在 google appengine 上使用 Nick Johnson 的批量更新库 http blog notdot net 2010 03 Announcing a robust datastore bulk update utili
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • scrapy python 请求未定义

    我在这里找到了答案 code for site in sites Link site xpath a href extract CompleteLink urlparse urljoin response url Link yield Re
  • 获取运行云功能的运行时服务帐户

    有没有办法以编程方式从云功能获取运行时服务帐户的电子邮件 我知道我可以 猜测 默认的 App Engine 帐户 因为它始终是 appspot gserviceaccount com 但这不是我想要的 我本来期待有一些环境变量 https

随机推荐

  • sqli-labs(29-31)

    序 这三关都是双服务器问题 网上很多教程都只考虑了apache 其实是php apache jsp tomcat 环境的搭建已经写在了另外一篇博客中 这里再推荐一下一个大牛写得很好的博客 里面把每关的原理都讲得很清晰 但是他里面关于本关的原
  • CV-对比学习-模型:MoCo/SimCLR/BYOL/SimSiam

    很多大佬认为 深度学习的本质就是做两件事情 Representation Learning 表示学习 和 Inductive Bias Learning 归纳偏好学习 在表示学习方面 如果直接对语义进行监督学习 虽然表现很好 但是它需要很多
  • lvs负载均衡、LVS集群部署

    四 LVS集群部署 lvs给nginx做负载均衡项目 218lvs DR 负载均衡器 yum y install ipvsadm 安装这个工具来管理lvs 设置VIP192 168 142 120 创建ipvsadm的文件用来存放lvs的规
  • c语言 如何创建txt文件,C++文本文件读写操作详解

    前面章节中 已经给大家介绍了文件流对象如何调用 open 方法打开文件 并且在读写 又称 I O 文件操作结束后 应调用 close 方法关闭先前打开的文件 那么 如何实现对文件内容的读写呢 接下来就对此问题做详细的讲解 在讲解具体读写文件
  • MySQL基础---连接查询(等值连接与非等值连接)

    多个表格查询 笛卡尔乘积现象 表1有m行 表2 有n行 结果有m n行 发生原因在于没有有效的连接条件 如何避免 添加有效的连接条件 方法 分类方法 按照年代分类 sql192标准和sql199标准 功能 内链接 等值连接 非等值连接 自连
  • 学习日记——物联网云平台(乐鑫云平台)

    物联网云平台了解 1 物联网云平台 接收设备上报的数据 向设备下发数据 对数据进行转发 分析 计算 显示 管理设备等 2 常见的物联网云平台一般有 私有物联网云平台 假设某瓜农 为瓜棚装上了物联网温湿计 温湿度数据通过网络发送某台主机 这台
  • redis--11.1--操作--对列表类型,集合类型,有序集合类型进行键排序

    redis 11 1 操作 对列表类型 集合类型 有序集合类型进行键排序 1 命令 sort key alpha BY pattern LIMIT offset count GET pattern GET pattern asc desc
  • javax.validation.constraints注解

    文章目录 概要 常用的注解 其他注解 小结 概要 javax validation constraints是Java Validation API中的一个包 它提供了一组注解 用于在Java代码中进行数据校验和验证 该包中定义了多个注解 用
  • LR(1)分析表-语法树-四元式

    这学期的编译原理终于学完了 不愧是号称最难的科目 要用C 从头到尾实现一下小型编译器 还真不容易啊 不过总算是做完了 首先上文法 这个文法是根据上一篇博客简化的 但还是有一点问题的 暂时发现有一个地方不符合LR1的规则 函数的返回类型如果是
  • 【ACOUG】Oracle技术爱好者的乐园

    ACOUG 的含义为 All China Oracle User Group http www acoug org 该组织是为了更好的提供一个Oracle用户的交流和活动平台 组织和发起一些公益性质的活动 这个组织是Eygle和Kamus发
  • 简单文件数据库-模拟图书馆管理系统-西安电子科技大学大一程序基础设计课程设计作业

    命令行参数如下 Libsim a u xxxx 第一个参数为可执行程序名称 第二个参数为用户身份 a表示管理员 u表示读者 第三个参数为用户名 问题分析 由于无法直接在文件中插入数据 不是简单覆盖 固采用将文件数据提取为链表的方法 对链表进
  • Spring源码系列:Bean的加载

    Spring源码系列 Bean的加载 前言 一 Bean的加载 1 1 FactoryBean的使用 案例 FactoryBean的使用和定义 1 2 缓存中获取单例Bean 1 2 1 Spring解决循环依赖的原理 1 以A类的角度来观
  • 中间件Redis简介

    Redis概述 什么是redis Redis是一种支持key value等多种数据结构的高速缓存数据库 用C语言编写 可以用于缓存 事件发布和订阅 高速队列等场景 提供字符串 哈希 列表 队列 集合直接存存取 基于内存 可以持久化 为什么要
  • DeFi撑爆以太坊基础设施,近1亿美元BTC已进入以太坊生态

    编译 隔夜的粥 以太坊和DeFi在过去几个月里经历了爆炸性的增长 这已经不是什么秘密了 在过去2 3周里 它们已达到了一个全新的水平 各种应用的使用量增长如此之快 以至于给以太坊主要基础设施提供商TheGraph带来了巨大压力 导致其支持的
  • C中字符串操作

    字符串可以看作一个数组 它的每个元素是字符型的 例如字符串 Hello world n 图示如下 H e l l o w o r l d n 0 15个字符 注意每个字符串末尾都有一个字符 0 做结束符 这里的 0是ASCII码的八进制表示
  • 初识运营,明晰运营的学习路径

    关于运营的思考 问题1 运营是什么 运营到底是做什么工作的 如题 到底什么是运营 为什么我们所接触到的很多运营都不太一样 有的运营就是每天追寻互联网热点 加班加点的写文案 有的运营每天就是在不同的群里和成千上万的人唠嗑 有的运营活跃在不同的
  • html获取text输入框中的值

    1 在head中引用jquery 2 定义一个text输入框
  • 指针用作函数参数、指针型函数和函数指针

    指针用作函数参数 以前我们学过的函数参数要么是基本数据类型的变量 要么是类的对象 又或者是数组名 前几讲学到的指针同样可以用作函数参数 指针作函数形参时 我们调用此函数将实参值传递给形参后 实参和形参指针变量将指向相同的内存地址 那么在被调
  • Linux主要命令功能

    1 dmesg 主要用来显示内核信息 使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题 另外使用dmesg可以确定你的服务器安装了那些硬件 每次系统重启 系统都会检查所有硬件并将信息记录下来 执行 bin dmesg命令可以查看
  • 第十届蓝桥杯真题-灵能传输

    题目 OJ https www lanqiao cn problems 196 learning 考点 前缀和 贪心 思路 题目意思就是希望通过灵能交换后使得不稳定度最小 假设对a i 进行灵能传输 可以发现前缀和s i 1 和s i 进行