蓝桥杯复盘记录004(2023)

涉及知识点

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 ans
    if cnt >= ans:
        return
    if weight == m:
        ans = min(ans, cnt)
    if index == n or weight >= m or weight + nex[index] < m: 
        return

    dfs(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 deque
    dq = deque()
    k = 2*k+1
    for i in range(k-1):
        while dq and s[i] <= s[dq[-1]]:
            dq.pop()
        dq.append(i)
    
    left = 0
    ans = []
    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 += 1
    return ans

res = 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 = 0

for i in range(21):
    zero = 1
    one = 0
    sum_val = 0
    cnt = 0
    for j in range(n):
        temp = (a[j] >> i) & 1
        sum_val ^= temp
        if sum_val == 0:
            zero += 1
            cnt += one
        else:
            one += 1
            cnt += zero
    ans += 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 x
    else:
        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] = 1
    destory.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 -= 1
        merge(l, r)

ans = [res]
for i in range(len(destory)-1, -1, -1):
    c = destory[i]
    res += 1
    broken[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 -= 1
            merge(c, j)
    ans.append(res)

for i in range(len(ans)-1, -1, -1):
    print(ans[i])

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…

【现代深度学习技术】卷积神经网络03:填充和步幅

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

【含文档+PPT+源码】基于SpringBoot和Vue的编程学习系统

项目介绍 本课程演示的是一款 基于SpringBoot和Vue的编程学习系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

网页复制小妙招

当你遇到网页时不能复制时&#xff0c;不要慌&#xff0c;教你一招可让你为所欲为。 平时你们在网上查找资料想复制时&#xff0c;总是会出现付费限制提示&#xff08;我也是qwq&#xff09;&#xff0c;这时不要慌&#xff0c;在空白处右击选择检查 按开检查&#xff0c;然后…

聆听PostgreSQL数据库的使用

参考&#xff1a;&#xff08;1&#xff09;零基础入门PostgreSQL教程 &#xff08;2&#xff09;菜鸟教程 文章目录 一、PostgreSQL是什么&#xff1f;二、基本使用1.下载2.操作&#xff08;1&#xff09;数据库&#xff08;2&#xff09;表 一、PostgreSQL是什么&#xff1f;…

内核进程调度队列(linux的真实调度算法) ─── linux第13课

目录 内核进程调度队列的过程 一个CPU拥有一个runqueue(运行队列在内存) 活动队列(active) 过期队列(expired) active指针和expired指针 重绘runqueue linux内核O(1)调度算法 总结 补充知识: 封装链式结构的目的是: 仅使用封装链式结构可以得到全部的task_struct的信…

【算法】手撕二分查找

目录 二分查找 【左闭右闭】/【相错终止】 【循环不变量】 【四要素】 二分查找的任意模板 【一般】情形 【左闭右闭】总结 mid的防溢出写法 【左闭右开】/【相等终止】 【一般】情形 再谈初始值 【左闭右开】总结 二分查找本质 【左开右闭】/【相等终止】 【一般…

C++入门基础知识1

今天&#xff0c;我们正式来学习C&#xff0c;由于C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助。 现在我们这篇主要是&#xff1a; 1. 补充C语言语法…

Leetcode 57-插入区间

给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区间的开始和…

【三.大模型实战应用篇】【4.智能学员辅导系统:docx转PDF的自动化流程】

去年团队庆功宴上,我司CTO端着酒杯过来:“老王啊,咱们现在文档解析做得挺溜了,但老师们总抱怨下载的作业格式乱码…” 我看了眼手机里凌晨三点收到的崩溃警报,把杯里的可乐一饮而尽——得,新的副本又开了。 一、为什么PDF转换比想象中难十倍? 某次用户调研中,数学教研…

Mac上安装Pycharm

说明&#xff1a;仅供参考&#xff0c;是自己的安装流程&#xff0c;以免以后自己想不起来来看看的笔记 官网地址&#xff1a;https://www.jetbrains.com/pycharm/ 1、点击Download&#xff0c;跳转到下一个页面 2、MAC&#xff0c;选择Mac OS&#xff0c;在Pycharm Professio…

【动手学强化学习】番外2-多智能体强化学习算法框架之“MARLlib”学习

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 调研当前主流的MARL算法框架2.2.2 学习经典MARL算法框架——“MARLlib”&#xff08;1&#xff09;开发团队&#xff08;2&#xff09;简介 2.2.3 安装经典MARL算法框架——“MARL…

VPC2-多域攻击-tomcat渗透-通达oa-域控提权-密码喷射-委派攻击-数据库提权

下载链接: https://pan.baidu.com/s/1nUYj6G9ouj6BcumDgoDaGg 提取码: ejbn jishu域 windows 2008 tomcat渗透 访问发现tomcat 点击manage app 尝试弱口令进入,发现tomcat/tomcat成功进入 用哥斯拉生成后门 然后建立一个文件夹&#xff0c;把它放进去&#xff0c;把它改名…

删除链表的倒数第N个节点 力扣19

一、题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&a…

yoloV5的学习-pycharm版本

真的很让人气愤的一点&#xff0c;老师把我的pycharm给卸载了&#xff0c;我那个上面不仅有gpu-torch&#xff0c;还有gpu-torch&#xff0c;他给俺删了&#xff0c;删了很久&#xff0c;我心都碎了&#xff0c;过几天我就去找他负责&#xff0c;让他给我装回来我的环境&#x…

安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?

EasyCVR安防视频监控平台不仅支持AI边缘计算智能硬件设备的接入&#xff0c;还能快速集成AI智能分析平台&#xff0c;接收来自智能分析平台或设备的AI告警信息&#xff0c;如烟火检测、周界入侵检测、危险区域闯入检测、安全帽/反光衣佩戴检测等。 本文将详细介绍如何在EasyCVR…

【漫话机器学习系列】111.指数之和的对数(Log-Sum-Exp)

在计算机科学和机器学习中&#xff0c;经常会遇到计算指数和的对数的情况&#xff0c;例如&#xff1a; 然而&#xff0c;由于指数函数 的值增长极快&#xff0c;直接计算可能会导致数值上溢&#xff08;overflow&#xff09;或下溢&#xff08;underflow&#xff09;&#xf…

【决策树】分类属性的选择

文章目录 1.信息增益&#xff08;ID3&#xff09;2.信息增益率&#xff08;C4.5&#xff09;3.基尼指数&#xff08;CART&#xff09;ps.三者对比 实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类&#xff0c;这种最优可以理解为希望划…

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK&#xff0c;接入校园网后一人登录&#xff0c;所有人都能通过连接此路由器上网&#xff0c;无法解决遂上网搜索&#xff0c;无果&#xff0c;幸而偶然看到一个帖子说要把信号源网线接入路由器lan口&#xff0c;开启新世界。 一、wan-lan&#xff0c;lan-lan区…