蓝桥杯复盘记录004(2023)

ops/2025/3/4 12:44:02/

涉及知识点

1.深搜

2.单调队列+滑动窗口

3.位运算

4.并查集

题目

1.lanqiao3505

思路:

dfs(index, weight, cnt) index表示瓜的索引, weight等于买瓜的重量, cnt表示买了多少瓜。

递归终止条件:1.如果瓜买完了,归

                         2.如果正好为目标重量,记录最小的切瓜次数

                          3. 如果最后一个瓜已经走过或重量已经超了, 或者从索引index后所有瓜买了也到不了目标重量直接return

为了方便计算,都乘2,并且排序

买整个第index瓜, dfs(index+1, weight +a[index], cnt)

买第index的一半 ,dfs(index+1, weight+a[index] // 2, cnt+1),切瓜次数+1

不买第index个瓜, dfs(index+1, weight, cnt)

很有意思的地方,条件判断的时候要首先判断瓜是不是已经最后一个瓜也就是最小的那个瓜已经判断过,然后判断重量是不是已经超过目标重量, 最后判断是不是当前重量加上所有后面的小瓜不到目标重量,说明往后dfs没用,直接return.

from itertools import accumulate
# 三种可能,买,买一半,不买
def dfs(index, weight, cnt):global ansif cnt >= ans:returnif weight == m:ans = min(ans, cnt)if index == n or weight >= m or weight + nex[index] < m: returndfs(index + 1, weight + a[index], cnt)dfs(index + 1, weight + a[index] // 2, cnt + 1)dfs(index + 1, weight, cnt)n, m = map(int, input().split())
a = list(map(int, input().split()))
a.sort()
m <<= 1
a = [x << 1 for x in a]
nex = list(accumulate(a))
a = a[::-1]
nex = nex[::-1]ans = n + 1
dfs(0, 0, 0)
print(-1 if ans == n + 1 else ans)

2.lanqiao2415

思路:

在字符串前面和后面拼接len为k的列表,列表中填充为inf。建立单调队列dq,先在0-k-1之间更新单调队列, 维持单调队列是队首最小,到队尾逐渐增大。while dq and s[i] <= s[dq[-1]] 。

然后从left开始记录res

如果队首索引在窗口之外,即if dq[0] == left: dq.pop() 并且left += 1 在这个过程中依然需要维持单调队列。

import os
import sys
from typing import List 
n = int(input())
s = list(map(int, input().split()))
k = int(input())s = [float('inf')] * (k) + s + [float('inf')] * (k)
def slide_up(s: List[int], k: int) -> List[int]:from collections import dequedq = deque()k = 2*k+1for i in range(k-1):while dq and s[i] <= s[dq[-1]]:dq.pop()dq.append(i)left = 0ans = []for right in range(k-1, len(s)):while dq and s[right] <= s[dq[-1]]:dq.pop()dq.append(right)ans.append(s[dq[0]])if dq[0] == left:dq.popleft()left += 1return ansres = slide_up(s, k)
for e in res:print(e, end=" ")

3.lanqiao3507

思路:

首先根据题目,知道它不会超过21位, 遍历顺序就是从第一位到第二十位,第一个数字到最后一个数字,如果sum_val 为0说明当前和和之前和为1的可以异或和为1,反之亦然。然后当sum_val 为0的时候, cnt += one 当sum_val为1时,cnt += zero这里就是初始化zero为1的原因。

对于样例来说:1 2 3 4 5

其实就是:

001

010

011

100

101

对第一列异或和为1的情况:

10

01

10

01

010

111

100

1101

10101

总共九种

39 = 1*9 + 2*5+4*5

n = int(input())
a = list(map(int, input().split()))
ans = 0for i in range(21):zero = 1one = 0sum_val = 0cnt = 0for j in range(n):temp = (a[j] >> i) & 1sum_val ^= tempif sum_val == 0:zero += 1cnt += oneelse:one += 1cnt += zeroans += cnt *(1 << i)
print(ans)

4.lanqiao828

思路:

这道题一看就是并查集的思路,前一部分就是模板。graph建图无向图。建立broken列表,1表示已经破坏,0表示未被破坏,其中的一个思路是,先全部破坏,然后重建。如果l, r没被破坏并且l, r的父亲们不是同一个则res -= 1,l,r连接起来。然后就是重建的过程,for i in range(k),倒叙,res += 1,假设不联通则res += 1, broken[c] = 0说明建好了,对和c相连的j遍历,如果j不是被破坏的,并且两个没有相同的父亲,则res -= 1,两个连起来。

n, m = map(int, input().split())
maxm = 200000
fa = list(range(n+1))def find(x):if fa[x] == x:return xelse:fa[x] = find(fa[x])return fa[x] 
def merge(x, y):fa[find(x)] = find(y)graph = [[] for _ in range(maxm)]
come = [0]*maxm
to = [0]*maxm
for i in range(m):a, b = map(int, input().split())graph[a].append(b)graph[b].append(a)come[i] = a to[i] = b destory = []
broken =  [0]*(n+1)
k = int(input())
for i in range(k):a = int(input())broken[a] = 1destory.append(a)res = n-k
for i in range(m):l = come[i]r = to[i]fa_l = find(l)fa_r = find(r)if not broken[l] and not broken[r] and fa_l != fa_r:res -= 1merge(l, r)ans = [res]
for i in range(len(destory)-1, -1, -1):c = destory[i]res += 1broken[c] = 0 for j in graph[c]:fa_c = find(c)fa_j = find(j)if not broken[j] and fa_c != fa_j:res -= 1merge(c, j)ans.append(res)for i in range(len(ans)-1, -1, -1):print(ans[i])

今年的蓝桥杯总不能放弃了吧QAQ


http://www.ppmy.cn/ops/163044.html

相关文章

如何免费使用稳定的deepseek

0、背景&#xff1a; 在AI辅助工作中&#xff0c;除了使用cursor做编程外&#xff0c;使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1&#xff0c;也给了自己不少启示。但是由于官网稳定性很差&#xff0c;很多…

iPhone 镜像 连接错误

重置连接 defaults delete com.apple.ScreenContinuity打开 iPhone 镜像 参考 mac镜像iPhone无法连接报错个人经历的 iPhone 镜像 bug 与部分解决办法

Python----数据分析(Matplotlib二:绘图一:折线图,条形图,直方图)

一、折线图 折线图是一种常用的数据可视化工具&#xff0c;它主要用于展示随时间或有序类别变化的数据趋势。 plt.plot(x, y, fmt, **kwargs) 名称描述x这个参数是数据点的 x 轴坐标&#xff0c;可以是一个列表或者数组。如果 x 没有被指 定&#xff0c;那么它默认为 range(l…

【算法】acwing算法基础875. 快速幂

题目 给定 n 组 ai,bi,pi&#xff0c;对于每组数据&#xff0c;求出 ai^bi mod pi 的值。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含三个整数 ai,bi,pi。 输出格式 对于每组数据&#xff0c;输出一个结果&#xff0c;表示 ai^bi mod pi 的值。 每个结果占一…

【软路由】ImmortalWrt 编译指南:从入门到精通

对于喜欢折腾路由器&#xff0c;追求极致性能和定制化的玩家来说&#xff0c;OpenWrt 无疑是一个理想的选择。而在众多 OpenWrt 衍生版本中&#xff0c;ImmortalWrt 以其更活跃的社区、更激进的特性更新和对新硬件的支持而备受关注。 本文将带你深入了解 ImmortalWrt&#xff0…

懒加载能够解决Spring循环依赖吗

懒加载本身并不能直接解决 Spring 循环依赖问题&#xff0c;但它可以在一定程度上缓解或绕过循环依赖带来的问题&#xff0c;下面详细分析&#xff1a; 1. 什么是 Spring 循环依赖 循环依赖指的是两个或多个 Bean 之间相互依赖&#xff0c;形成一个闭环。例如&#xff0c;Bea…

React学习笔记08

一、什么是Redux Redux是React中最常用的集中状态管理工具&#xff0c;类似于Vue中的Pinia&#xff08;Vuex&#xff09;&#xff0c;可以独立于框架运行&#xff0c;作用是通过集中管理的方式管理应用的状态 二、Redux快速体验 手搓一个Redux&#xff1a; 1、定义一个reduc…

JavaWeb后端基础(4)

这一篇就开始是做一个项目了&#xff0c;在项目里学习&#xff0c;我主要记录在学习过程中遇到的问题&#xff0c;以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中&#xff0c;通过四种请求方式&#xff0c;来操作数据的增删改查。 GET &#xff1a; 查询 …