[蓝桥复盘] 算法赛内测赛2 20230831

[蓝桥复盘] 算法赛内测赛2 20230831

    • 总结
    • 新一与基德的身高大战
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 肖恩的投球游戏加强版
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 体育健将
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 小桥的奇异旋律
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 区间or划分
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

总结

  • 好难啊。
  • T1 数学
  • T2 二维差分模板
  • T3 贪心+树状数组上二分
  • T4 差分模拟
  • T5 贪心+前后缀分解

在这里插入图片描述

新一与基德的身高大战

链接: 新一与基德的身高大战

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 奇数+偶数会造成损失,那么优先把奇数和奇数互相配对即可。

3. 代码实现


def solve():n, = RI()a = sorted(RILST(), key=lambda x: x & 1)b = sorted(RILST(), key=lambda x: x & 1)print(sum((x + y) // 2 for x, y in zip(a, b)))

肖恩的投球游戏加强版

链接: 肖恩的投球游戏加强版

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 直接贴模板,二维树状数组或者二维差分即可。

3. 代码实现

class BinTree2DIUPQ:"""二维树状数组"""def __init__(self, m, n):self.n = nself.m = mself.tree = [[0] * (n + 1) for _ in range(m + 1)]def lowbit(self, x):return x & (-x)def _update_point(self, x, y, val):m, n, tree = self.m, self.n, self.treewhile x <= m:y1 = ywhile y1 <= n:tree[x][y1] += valy1 += y1 & -y1x += x & -xdef _sum_prefix(self, x, y):res = 0tree = self.treewhile x > 0:y1 = ywhile y1 > 0:res += tree[x][y1]y1 &= y1 - 1x &= x - 1return resdef add_interval(self, x1, y1, x2, y2, v):self._update_point(x1, y1, v)self._update_point(x2 + 1, y1, -v)self._update_point(x1, y2 + 1, -v)self._update_point(x2 + 1, y2 + 1, v)def query_point(self, x, y):return self._sum_prefix(x, y)#       ms
def solve():n, m, q = RI()tree = BinTree2DIUPQ(n, m)for i in range(1, n + 1):row = RILST()for j, v in enumerate(row, start=1):tree.add_interval(i, j, i, j, v)for _ in range(q):x1, y1, x2, y2, c = RI()tree.add_interval(x1, y1, x2, y2, c)for i in range(1, n + 1):ans = []for j in range(1, m + 1):ans.append(tree.query_point(i, j))print(*ans)

体育健将

链接: 体育健将

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 首先想背包,发现值域1e8,放弃。那肯定是贪心了。
  • 题目特殊点肯定是最后一个比赛可以无视休息,那么考虑枚举每一个比赛作为只取a的那场,看剩余k-ai的时间,能取多少场比赛。
  • 那么按a+b排序,然后在树状数组上二分即可,对于每个i,看前缀<=k-ai能到哪。

3. 代码实现

def lower_bound(lo: int, hi: int, key):"""由于3.10才能用key参数,因此自己实现一个。:param lo: 二分的左边界(闭区间):param hi: 二分的右边界(闭区间):param key: key(mid)判断当前枚举的mid是否应该划分到右半部分。:return: 右半部分第一个位置。若不存在True则返回hi+1。虽然实现是开区间写法,但为了思考简单,接口以[左闭,右闭]方式放出。"""lo -= 1  # 开区间(lo,hi)hi += 1while lo + 1 < hi:  # 区间不为空mid = (lo + hi) >> 1  # py不担心溢出,实测py自己不会优化除2,手动写右移if key(mid):  # is_right则右边界向里移动,目标区间剩余(lo,mid)hi = midelse:  # is_left则左边界向里移动,剩余(mid,hi)lo = midreturn hiclass BinIndexTree:"""    PURQ的最经典树状数组,每个基础操作的复杂度都是logn;如果需要查询每个位置的元素,可以打开self.a    """def __init__(self, size_or_nums):  # 树状数组,下标需要从1开始# 如果size 是数字,那就设置size和空数据;如果size是数组,那就是aif isinstance(size_or_nums, int):self.size = size_or_numsself.c = [0 for _ in range(self.size + 5)]# self.a = [0 for _ in range(self.size + 5)]else:self.size = len(size_or_nums)# self.a = [0 for _ in range(self.size + 5)]self.c = [0 for _ in range(self.size + 5)]for i, v in enumerate(size_or_nums):self.add_point(i + 1, v)def add_point(self, i, v):  # 单点增加,下标从1开始# self.a[i] += vwhile i <= self.size:self.c[i] += vi += i & -idef sum_prefix(self, i):  # 前缀求和,下标从1开始s = 0while i >= 1:s += self.c[i]# i -= i&-ii &= i - 1return sdef lowbit(self, x):return x & -x#       ms
def solve():n, k = RI()a = RILST()b = RILST()ans = 0s = BinIndexTree(n)ab = sorted(zip(a, b), key=lambda x: x[0] + x[1])for i, (x, y) in enumerate(ab, start=1):s.add_point(i, x + y)for i, (x, y) in enumerate(ab, start=1):s.add_point(i, -(x + y))p = lower_bound(1, n, lambda y:s.sum_prefix(y) > k-x) - 1ans = max(ans, 1 + p - int(p >= i))s.add_point(i, x + y)print(ans)

小桥的奇异旋律

链接: 小桥的奇异旋律

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 由于是交替,可以考虑枚举正负正负…和负正负正…两种情况。
  • 由于求的是前缀和,但修改的是原数组,因此考虑枚举前缀和,从前向后处理,做差分即可。
  • 对于每个位置,如果它正负性不满足,则调整到1或-1。

3. 代码实现

def solve():n, = RI()a = RILST()p = list(accumulate(a))ans = 0def get(z):d =ans= 0for i,v in enumerate(p):v += dif i %2==z:  # 需求正数if v <= 0:x = 1 - vans += xd += xelse:  # 需求负数if v >= 0:x = v+1ans += xd -= xreturn ansprint(min(get(1),get(0)))

区间or划分

链接: 区间or划分

1. 题目描述

在这里插入图片描述

2. 思路分析

赛中看错题了,以为是异或,其实是或,那就好想一点。
  • 由于a|b<a+b,那么最小的或和,一定是整个数组或起来的值。
  • 那么每一位上的1一定要在同一组,否则会进位。
  • 考虑能分多少组:发现两组的分界点一定等价于前缀或&后缀或==0。

3. 代码实现

def solve():n, = RI()a = RILST()m = reduce(ior,a)p = [0]+list(accumulate(a,ior))s = 0ans =  0for i in range(n-1,-1,-1):s |= a[i]if s & p[i] == 0:ans += 1print(m,ans)

六、参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/114586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL告警“Connection attributes of length 570 were truncated“

mysql的错误日志中看到如下报错"[Warning] Connection attributes of length 571 were truncated"。比如&#xff1a; 2023-09-01T08:37:49.87392408:00 9149015 [Warning] [MY-010288] [Server] Connection attributes of length 570 were truncated (76 bytes los…

圆圈加数字的css

方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…

GaussDB数据库SQL系列-行列转换

一、前言 二、简述 1、行转列概念 2、列转行概念 三、GaussDB数据库的行列转行实验示例 1、行转列示例 1&#xff09;创建实验表&#xff08;行存表&#xff09; 2&#xff09;静态行转列 3&#xff09;行转列&#xff08;结果值&#xff1a;拼接式&#xff09; 4&…

Config:客户端连接服务器访问远程

springcloud-config: springcloud-config push pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

Centos7 安装 docker

1、前提条件 目前&#xff0c;CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS7 (64)上&#xff0c; 要求系统为64位、Linux系统内核版本为 3.8以上 查看自己系统的内核 cat /etc/redhat-release 或 uname -r 2、卸载旧版本 旧版本的 Docker 的名称为docker或doc…

【算法】函数渐近的界基础知识及定理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入

1. Scala的特质trait与java接口的区别 Scala中的特质&#xff08;trait&#xff09;和Java中的接口&#xff08;interface&#xff09;在概念和使用上有一些区别&#xff1a; 默认实现&#xff1a;在Java中&#xff0c;接口只能定义方法的签名&#xff0c;而没有默认实现。而在…

unity界面上Global 与Local xyz- right up forward

gloabal 如果要沿这个方向移动就比较困难 local下就不一样了

【数据结构】队列篇| 超清晰图解和详解:循环队列模拟、用栈实现队列、用队列实现栈

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 每一个不曾起舞的日子&#xff0c;都是对生命的辜负。——尼采 目录 一、 模拟实现循环队列二、用栈实现队列⭐三、225. 用队列实现栈 一、…

Python Qt学习(八)Treeview

源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_treeview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…

大数据Flink(七十):SQL 动态表 连续查询

文章目录 SQL 动态表 & 连续查询 一、​​​​​​​SQL 应用于流处理的思路

ssm园区停车管理系统源码和论文

ssm园区停车管理系统源码和论文104 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#x…

Gatling 入门

1.新建一个测试接口项目 里面代码非常简单&#xff0c;就一个hi接口&#xff1a; package com.example.gatlingdemo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import java.ti…

拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程

使用拼多多开放平台的API接口可以获取拼多多电商数据。以下是一般的API接口流程&#xff1a; 1. 注册开发者账号&#xff1a;首先&#xff0c;您需要在拼多多开放平台注册一个开发者账号。通过开发者账号&#xff0c;您可以获得API密钥和其他必要的信息。 2. 鉴权与认证&…

33、Flink之hive介绍与简单示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附&#xff1a;查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下&#xff08;示例&#xff09;&#xff1a;Windows代码如下&#xff08;示例&#xff09;&#xff1a;手工执行代码如下&#xff08;示例&#xff09;&…

vite 配置自动补全文件的后缀名

vite 不建议自动补全&#xff0c;文件的后缀名的 const Home ()>import("/views/Home.vue");文件是必须要加上 .vue 的后缀名的 如果 想要像 webpack 一样的不用写&#xff0c; 可以在vite.config.js中配置如下就可以了

【iOS】Masonry的基本使用

文章目录 前言一、使用Masonry的原因二、约束的常识三、Masonry的简单使用四、Masonry的用例总结 前言 暑假安装了cocoapods&#xff0c;简单使用其调用了SVGKit&#xff0c;但是没有学习Masonry&#xff0c;特此总结博客记录Masonry的学习 一、使用Masonry的原因 Masonry是一…

持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

文章目录 持续集成&#xff08;CI&#xff09;的最佳实践持续交付&#xff08;CD&#xff09;的最佳实践云计算环境下的特别注意事项 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&am…

docker启动paddlespeech服务,并使用接口调用

一、检查docker容器是否启动 1.输入命令 systemctl status docker 启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker…