牛客周赛 Round 32 解题报告 | 珂学家 | 状压 + 前缀和异或map技巧


前言

alt


整体评价

属于补题,大致看了下,题都很典。


欢迎关注

珂朵莉 牛客周赛专栏

珂朵莉 牛客小白月赛专栏


A. 小红的 01 背包

思路: 数学题

v, x, y = list(map(int, input().split()))print (v // x * y)

B. 小红的 dfs

思路: 枚举

其实横竖都有dfs字符,只有3种情况

  • 第一行,第一列为dfs
  • 第二行,第二列为dfs
  • 第三行,第三列为dfs

枚举取最小代价即可

grids = []
for i in range(3):grids.append(input())# 枚举
def cost(y, x, ch) -> int:if grids[y][x] == ch:return 0return 1r1 = cost(0, 0, 'd') + cost(0, 1, 'f') + cost(0, 2, 's') \+ cost(1, 0, 'f') + cost(2, 0, 's')r2 = cost(1, 0, 'd') + cost(1, 1, 'f') + cost(1, 2, 's') \+ cost(0, 1, 'd') + cost(2, 1, 's')r3 = cost(2, 0, 'd') + cost(2, 1, 'f') + cost(2, 2, 's') \+ cost(0, 2, 'd') + cost(1, 2, 'f')print (min(r1, r2, r3))

C. 小红的排列生成

思路: 贪心

猜结论,感觉就是排序后

累加 abs(i - arr[i])

n = int(input())arr = list(map(int, input().split()))
arr.sort()res = 0
for i in range(n):res += abs(i + 1 - arr[i])print (res)

D. 小红的二进制树

思路: 树形DP

自底向上的DFS即可

n = int(input())
s = input()g = [[] for _ in range(n + 1)]for i in range(n - 1):u, v = list(map(int, input().split()))g[u].append(v)g[v].append(u)from types import GeneratorTypedef bootstrap(f, stack=[]):def wrappedfunc(*args, **kwargs):if stack:return f(*args, **kwargs)else:to = f(*args, **kwargs)while True:if type(to) is GeneratorType:stack.append(to)to = next(to)else:stack.pop()if not stack:breakto = stack[-1].send(to)return toreturn wrappedfunc# python dfs会栈溢出
dp = [0] * (n + 1)@bootstrap
def dfs(u: int, fa: int):for v in g[u]:if v == fa:continueyield dfs(v, u)dp[u] += dp[v]if s[u - 1] == '1':dp[u] += 1yielddfs(1, -1)for i in range(1, n + 1):print (dp[i] - (1 if s[i - 1] == '1' else 0))

E. 小红的回文数

思路: 前缀和 + 异或map技巧

就是0~9这10个构建一个字符集

由于奇偶特性可以借助异或来表达

这样就变成1024种状态

时间复杂度为

O ( 10 ∗ n ) O(10 * n) O(10n)

x = input()from collections import Countercnt = Counter()
cnt[0] = 1res = 0
s = 0
for c in x:p = ord(c) - ord('0')s ^= (1 << p)res += cnt[s]for i in range(10):res += cnt[s ^ (1 << i)]cnt[s] += 1print (res)

F. 小红的矩阵修改

思路: 状压 + 3进制

很典的一道状压入门题

时间复杂度:

O ( 3 2 n ∗ m ) O(3^{2n} * m) O(32nm)

n, m = list(map(int, input().split()))def mapping(c) -> int: if c == 'r': return 0elif c == 'e':return 1return 2grids = []
for i in range(n):s = input()grids.append([mapping(c) for c in s])# 状压DP
# 3进制from math import pow, inf
y = int(pow(3, n))dp = [0] * ydef compute(idx, state) -> int:if not isValid(state):return infcost = 0for i in range(n):d = state % 3state = state // 3if grids[i][idx] != d:cost += 1return costdef isValid(state) -> bool:r = []for i in range(n):r.append(state % 3)state = state // 3for i in range(len(r) - 1):if r[i] == r[i+1]:return Falsereturn Truedef twoValid(s1: int, s2: int) -> bool:r1, r2 = [], []for i in range(n):r1.append(s1 % 3)s1 = s1 // 3r2.append(s2 % 3)s2 = s2 // 3for i in range(len(r1) - 1):if r1[i] == r1[i+1] or r2[i] == r2[i+1]:return Falsefor i in range(len(r1)):if r1[i] == r2[i]:return Falsereturn Truefor i in range(y):dp[i] = compute(0, i)for j in range(1, m):dp2 = [inf] * yfor k in range(y):c = compute(j, k)for k2 in range(y):if twoValid(k, k2):dp2[k] = min(dp2[k], dp[k2] + c)dp = dp2print(min(dp))    

写在最后

alt

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

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

相关文章

Java编程练习之类的继承

1.创建银行卡类&#xff0c;并分别设计两个储蓄卡和信用卡子类。 import javax.swing.plaf.BorderUIResource;import java.util.Scanner;class Card {int Id; //银行卡&#xff1b;int password; //密码&#xff1b;double balance2000; //账户存款金额&#xff1b;String A…

软件安全测试报告如何编写?权威的安全测试报告如何获取?

软件安全测试报告是一份详尽的文件&#xff0c;它主要通过对软件进行全面、系统的测试&#xff0c;评估软件的安全性&#xff0c;并在测试结束后起草编写的报告。该报告能清晰地展示出软件的各项安全风险以及潜在威胁&#xff0c;为用户提供安全方面的决策依据&#xff0c;并帮…

指针的基本含义及其用法

1.前言 在学习C语言的时候&#xff0c;我们会经常接触一个概念&#xff0c;指针和地址&#xff0c;关于这两个概念很多人并不能理解地十分透彻&#xff0c;接下来我将详细介绍一下这两者的概念 2.地址 我们知道计算机的上CPU&#xff08;中央处理器&#xff09;在处理数据的时…

Java常用类与基础API--String的理解与不可变性

文章目录 一、字符串相关类之不可变字符序列&#xff1a;String&#xff08;1&#xff09;对String类的理解(以JDK8为例说明)1、环境2、类的声明3、内部声明的属性 &#xff08;2&#xff09;String的特性&#xff08;3&#xff09;字符串常量的存储位置1、举例2、String的存储…

1. pick gtk dll 程序的制作

文章目录 前言预览细节要点初始窗口尺寸提示音快速提示信息对话框AlertDialog鼠标移入移出事件布局与父子控件关系图片 后续源码及资源 前言 在之前的打包测试中我提到了需要一个挑选dll的程序于是我打算用Gtk来制作这个程序 预览 细节要点 初始窗口尺寸 只有主窗口有set_d…

windows11 MSYS2下载安装教程

MSYS2 可以理解为在windows平台上模拟linux编程环境的开源工具集 当前环境&#xff1a;windows11 1. 下载 官网地址可下载最新版本&#xff0c;需要科学上网 https://www.msys2.org/ 2. 安装 按照正常安装软件流程一路next就可以 打开 3. 配置环境 网上很多教程提到需…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门之常用属性

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

双重OSPF + OSPF综合实验

一、实验要求 1.R4为ISP&#xff0c;所连接的所有物理接口为公有网段&#xff0c;任意指定IP即可。 2.R1-2-3 构建一个星型结构的MGRE结构&#xff0c;其中R1为中心点&#xff0c;假设R1的公有IP为固定地址。 3.R1-5-6 构建另一个全连网状的MGRE网络&#xff0c;其中R1/5均为中…

分享3款开源免费好用的Docker可视化管理工具安装部署教程

文章目录 1.前言2.Docker Desktop3.Portainer3.1 Portainer默认英文版本安装3.2 Portainer汉化版本安装3.3官方镜像说明3.3.1ssl访问3.3.2Nginx反代3.3.3Nginx反代设置子目录3.3.4docker-compose部署 3.4登录 4.DockerUI4.1简介4.2项目地址4.3部署启动命令4.4登录4.5首页 5.总结…

配置VMware实现从服务器到虚拟机的一键启动脚本

正文共&#xff1a;1666 字 15 图&#xff0c;预估阅读时间&#xff1a;2 分钟 首先祝大家新年快乐&#xff01;略备薄礼&#xff0c;18000个红包封面来讨个开年好彩头&#xff01; 虽然之前将服务器放到了公网&#xff08;成本增加了100块&#xff0c;内网服务器上公网解决方案…

蓝桥杯嵌入式第9届真题(完成) STM32G431

蓝桥杯嵌入式第9届真题(完成) STM32G431 题目 分析和代码 main.h /* USER CODE BEGIN Header */ /********************************************************************************* file : main.h* brief : Header for main.c file.* …

分析“e^iπ+1=0”的错谬及其违反数学规则

如果评选从远古到现代对人类智商羞辱最严重的事件&#xff0c;欧拉公式“e^iπ-1”若说第二、就没有哪个能称第一。 看下面罗列的关系&#xff0c;数学伦理在大数学家欧拉眼里形同虚设&#xff1a; ①“e^iπ-1”没有代码&#xff0c;不能表示数量变化关系&#xff0c;它来自e^…