[LeetCode复盘] LCCUP‘23春季赛组队赛 20230507

news2024/11/24 19:01:54

[LeetCode复盘] LCCUP'23春季赛组队赛 20230507

    • 一、本周周赛总结
    • 1. 符文储备
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 2. 城墙防线
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 3. 提取咒文
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 4. 生物进化录
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 5. 与非的谜题
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • 个人稳定爆零,全靠队友带飞。
  • T1 DP。
  • T2 二分答案。
  • T3 n次多源最短路。
  • T4 树上贪心。
  • T5 位运算。
  • T6 连楼教主都没ac。
    在这里插入图片描述

1. 符文储备

1. 符文储备

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 由于顺序不重要,因此可以让临近的差值变小的方案是排序。
  • 那么就是最长子段。

3. 代码实现

class Solution:
    def runeReserve(self, runes: List[int]) -> int:
        runes.sort()
        n = len(runes)
        f = [1]*n
        for i in range(1,n):
            if runes[i]-runes[i-1]<=1:
                f[i] += f[i-1]
        return max(f) 

2. 城墙防线

2. 城墙防线

1. 题目描述

在这里插入图片描述

2. 思路分析

二分答案。

  • 显然,若x不行,则x+1更不行;x可以,x-1更可以。满足单调性。
  • 由于两边是无限的,因此只判断中间的n-2个位置即可。
  • 让城墙先优先往左膨胀,剩下的部分向右膨胀。
  • 记录每个城墙膨胀完右侧的位置,下一个城墙就可以向左尽量延伸。

3. 代码实现

class Solution:
    def rampartDefensiveLine(self, a: List[List[int]]) -> int:
        n = len(a)
        def ok(x):
            p = a[0][1]  # 前一个城墙右端扩展到哪
            for i in range(1,n-1):
                l,r = a[i]
                if l - p>=x:
                    p = r 
                else:
                    p = r + x - l + p
                    if p > a[i+1][0]:
                        return True 
            return False 
        return bisect_left(range(10**9),True,key=ok)-1

3. 提取咒文

3. 提取咒文

1. 题目描述

在这里插入图片描述

2. 思路分析

上来就做t3卡了一个小时,真的难受。
  • 对于每个字符,都跑一遍多源最短路,看看从上一个字符来的花费。
  • 然后用dist建立新的q,去跑下一个字符。
  • 注意用dir4个方向去跑,这样转移就是4,复杂度控制在lennmlgnm。

3. 代码实现

class Solution:
    def extractMantra(self, g: List[str], s: str) -> int:
        m,n = len(g),len(g[0])
        p = set()
        for row in g:
            p|=set(row)
        if any(c not in p for c in s):
            return -1 
        idx = defaultdict(list)
        for i,row in enumerate(g):
            for j,c in enumerate(row):
                idx[c].append((i,j))
        q = [(0,0,0)]
        for c in s:
            dist = [[inf]*n for _ in range(m)]
            for d,x,y in q:
                dist[x][y] = d 
            while q:
                d,x,y = heappop(q)
                if d > dist[x][y]:continue 
                for a,b in (x+1,y),(x-1,y),(x,y+1),(x,y-1):
                    if 0<=a<m and 0<=b<n:
                        p = d+1
                        if p<dist[a][b]:
                            dist[a][b] = p 
                            heappush(q,(p,a,b))
            q = []
            for i,j in idx[c]:
                q.append((dist[i][j]+1,i,j))
            q.sort()
        return min(dist[x][y]+1 for x,y in idx[s[-1]])            

4. 生物进化录

4. 生物进化录

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 令dfs(u)为计算u这颗子树结束后返回u的最短路径。
  • 那么对于所有子树,优先要把字典序小的排到前边。但这个顺序应该判断两个字符串加起来后比较。具体看代码。
  • 最后把后缀的1去除即可。

3. 代码实现

class Solution:
    def evolutionaryRecord(self, parents: List[int]) -> str:
        n = len(parents)
        g = [[] for _ in range(n)]
        z = -1
        for i,f in enumerate(parents):
            if f == -1:
                z = i 
            else:
                g[f].append(i)
        def cmp(a,b):
            s1 = a+ b
            s2 = b+a 
            return -1 if s1<s2 else 1 
        
        def dfs(u):
            x = []
            for v in g[u]:
                a = dfs(v)
                x.append('0'+a+'1')
            if not x:
                return ''
            x.sort(key=cmp_to_key(cmp))
            
            
            return ''.join(x)  # 返回根,不返回
        
        b =  dfs(z)
        return  b.rstrip('1')            

5. 与非的谜题

5. 与非的谜题

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 先观察与非操作,总结一下:
    • 0 NAND 0 = 1
    • 0 NAND 1 = 1
    • 1 NAND 0 = 1
    • 1 NAND 1 = 0
    • 我们发现但凡操作里有0则结果是0。
    • 若操作里是1,则把另个数翻转。
  • 考虑若k=1,即arr和y里只有0和1。那么每次type=1的操作,分类讨论:
    • 若a[-1]==0,则ans = 1
    • 若a[-1]==1,则会在最后一步被翻转;若前边还是1,则还是翻转。
      • 那么计算a末尾1的长度p,前边那个0会使ans变成1,后边p个1会使1翻转p次,考虑奇偶即可。
      • 若a中干脆没有0,则会被翻转p=x*n次,同样考虑p的奇偶性即可;但这时初始不是1,而是y。

  • 上边讨论了只有1位的情况,对于k位,分别计算即可。

  • 一开始我写了树状数组二分来计算后缀1的长度,复杂度nklgnlgn,TLE。
  • 后来换了SortedList过了,用SortedList记录每位里0的位置,n减去最后一个0的位置就是后缀1的长度。

3. 代码实现

from sortedcontainers import SortedList
class Solution:
    def getNandResult(self, k: int, arr: List[int], operations: List[List[int]]) -> int:        
        n = len(arr)
        trees = [SortedList() for _ in range(k)]
        for i,v in enumerate(arr):
            for j in range(k):
                if (v>>j)&1==0:
                    trees[j].add(i)
            
        ans = 0
        for t,x,y in operations:
            if t == 0:
                for j in range(k):                   
                    trees[j].discard(x)
                    if (y>>j)&1==0:
                        trees[j].add(x)
            else:
                z = 0
                for j in range(k):
                    tree = trees[j]
                    if len(tree)==n:
                        z|= 1<<j
                        continue
                    
                    if not tree:
                        p = x*n
                        r = (y>>j)&1
                        if p&1:
                            r ^= 1
                        z|= r<<j 
                    else:
                        r = 1
                        p = n - tree[-1]-1
                        if p&1:
                            r^=1
                        z |= r<<j
                # print(z)
                ans ^= z 
        return ans       

参考链接

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HNU-操作系统OS-实验Lab3

OS_Lab3_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 实验目的 了解虚拟内存的Page Fault异常处理实现了解页替换算法在操作系统中的实现 实验内容 本次实验是在lab2的基础上&#xff0c;借助于页表机制…

【python数据分析】运算符与表达式

&#x1f64b;‍ 哈喽大家好&#xff0c;本次是python数据分析、挖掘与可视化专栏第三期 ⭐本期内容&#xff1a;运算符与表达式 &#x1f3c6;系列专栏&#xff1a;Python数据分析、挖掘与可视化 &#x1f44d;保持开心&#xff0c;拒绝拖延&#xff0c;你想要的都会有&#x…

车载软件架构——闲聊几句AUTOSAR BSW(四)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

iOS 对https App内部的http请求进行白名单设置

苹果从iOS9开始要求应用使用Https链接来对请求进行加密,来保证数据的安全.如果使用http请求将会报错,当然,如果你想继续使用http请求,有两种方式: 1.使用ASIHttpRequest来请求,ASI是使用CFNetwork来处理请求的,更底层些,避开了苹果的限制 2.在Info.plist文件设置如下 <key…

Docker安装常用软件-Apollo(有问题)

零&#xff1a;apollo概念介绍 官网网站&#xff1a;GitHub - apolloconfig/apollo: Apollo is a reliable configuration management system suitable for microservice configuration management scenarios. gitee网址&#xff1a;mirrors / ctripcorp / apollo GitCode …

自学软件测试简历没项目写怎么办?

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验…

Python:Python进阶:Python字符串驻留技术

Python字符串驻留技术 1.什么是字符串驻留2. 为什么要驻留字符串3. Python的字符串驻留4. Python 字符驻留原理4.1 如何驻留字符串4.2 如何清理驻留的字符串 5. 字符串驻留的实现5.1. 变量、常量与函数名5.2 字典的键5.3 任何对象的属性5.4 显式地驻留 6 字符串驻留的其他发现 …

MySQL --- DML

接下来学习第二个部分&#xff1a;根据页面原型以及需求进行相关功能的开发&#xff0c;进而完成数据库的操作。 学习数据库的DML操作 3. 数据库操作-DML-insert&#xff0c;update,delete DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据…

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1 pbi-utils 更新至&#xff1a;v1.0.3.1, 从 v1.0.0.0 到 v1.0.3.1 更新了 8 次。 文档地址&#xff1a;https://jiaopengzi.com/2880.html 主要功能&#xff1a; 快速设置 Power BI 模板&#xff0c;实现高复用。设计…

【大数据基础】Spark+Kafka构建实时分析Dashboard

https://dblab.xmu.edu.cn/post/spark-kafka-dashboard/ https://dblab.xmu.edu.cn/post/8116/ 实验环境准备 Kafka安装 访问Kafka官方下载页面,下载稳定版本0.10.1.0的kafka.此安装包内已经附带zookeeper,不需要额外安装zookeeper.按顺序执行如下步骤: cd ~/下载 sudo tar …

《Markdown编辑器》的使用

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Simulink 自动代码生成电机控制:方波高频注入仿真到代码生成开发板演示

目录 前言 方波高频注入仿真 生成代码开发板运行 总结 前言 最近换了一个小电机&#xff0c;于是尝试了一下方波高频注入的仿真到代码生成的实验&#xff0c;正弦波注入的方式已经实现 STM32 Simulink 自动代码生成电机控制——脉振高频注入_高频注入代码_卡洛斯伊的博客-…

【Linux】进程信号(下)

文章目录 1.信号处理相关问题内核态与用户态概念的理解为什么要有 用户态和内核态CR3寄存器的使用信号处理的整体过程 1.信号处理相关问题 信号处理&#xff0c;不是可以立即处理的&#xff0c;而是在合适的时候 不懂点击: 信号的产生第三点 什么时候是合适的时候&#xff1f;…

Android Studio下载及安装和Gradle的配置

文章目录 下载安装双击打开exe文件 修改Sdk的位置创建项目修改Gradle的位置 下载 下载地址&#xff1a;官方下载地址 打开后往下拉&#xff0c;直到最后的I agree to the terms. 这里选择的android studio版本是&#xff1a;2021.2.1.16&#xff0c;也可以根据自己的需要下载…

语义分割总结

文章目录 0. 前言1. 数据集2. 经典网络2.1 FCN2.2 U-Net2.3 DeepLab2.4 PSPNet2.5 SegNet2.6 CCNet2.7 SegFormer 3. 损失函数4. 评价指标5. 最新进展&#xff08;2023.4&#xff09; Segment Anything 0. 前言 语义分割是一种计算机视觉领域的图像分割技术&#xff0c;旨在将…

校内赛WP

Web题目镜像如下&#xff1a; docker pull lauaiwin/hzuctf-flaskrce:latest docker pull lauaiwin/hzuctf-ezphp:latest docker pull lauaiwin/hzuctf-babysql:latest docker pull lauaiwin/hzuctf-sign:latest docker pull lauaiwin/hzuctf-ezupload:latestWeb-签到 通过loc…

sentinel 随笔 2-降级处理

0. 像喝点东西&#xff0c;但不知道喝什么 先来段源码&#xff0c;看一下 我们在dashboard 录入的降级规则&#xff0c;都映射到哪些字段上 package com.alibaba.csp.sentinel.slots.block.degrade;public class DegradeRule extends AbstractRule {public DegradeRule(String…

Spring的第十二阶段(03):Spring实现AOP的简单使用

1、获取拦截方法的返回值和抛的异常信息 获取方法返回的值分为两个步骤&#xff1a; 1、在返回值通知的方法中&#xff0c;追加一个参数 Object result 2、然后在AfterReturning注解中添加参数returning“参数名” 获取方法抛出的异常分为两个步骤&#xff1a; 1、在异常通…

Python入门(五)列表(二)

列表&#xff08;二&#xff09; 1.组织列表1.1 使用方法sort()对列表永久排序1.2 使用函数sorted()对列表临时排序1.3 倒着打印列表1.4 确定列表的长度1.5 使用列表时避免索引错误 2.操作列表2.1 遍历整个列表2.1.1 for循环2.1.2 在for循环中执行更多操作2.1.3 在for循环结束后…