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

news2024/11/24 1:43:48

前言

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 0
    return 1

r1 = 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 GeneratorType

def 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:
                        break
                    to = stack[-1].send(to)
            return to

    return wrappedfunc

    
# python dfs会栈溢出
dp = [0] * (n + 1)

@bootstrap
def dfs(u: int, fa: int):
    for v in g[u]:
        if v == fa:
            continue
        yield dfs(v, u)
        dp[u] += dp[v]
    if s[u - 1] == '1':
        dp[u] += 1
    yield

dfs(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 Counter

cnt = Counter()
cnt[0] = 1

res = 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] += 1
    
print (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 0
    elif c == 'e':
        return 1
    return 2

grids = []
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] * y

def compute(idx, state) -> int:
    if not isValid(state):
        return inf
    
    cost = 0
    for i in range(n):
        d = state % 3
        state = state // 3
        if grids[i][idx] != d:
            cost += 1
    return cost

def isValid(state) -> bool:
    r = []
    for i in range(n):
        r.append(state % 3)
        state = state // 3
    for i in range(len(r) - 1):
        if r[i] == r[i+1]:
            return False
    return True

def twoValid(s1: int, s2: int) -> bool:
    r1, r2 = [], []
    for i in range(n):
        r1.append(s1 % 3)
        s1 = s1 // 3
        r2.append(s2 % 3)
        s2 = s2 // 3
    for i in range(len(r1) - 1):
        if r1[i] == r1[i+1] or r2[i] == r2[i+1]:
            return False
    for i in range(len(r1)):
        if r1[i] == r2[i]:
            return False
    return True
            
for i in range(y):
    dp[i] = compute(0, i)
    

for j in range(1, m):
    dp2 = [inf] * y
    for 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 = dp2

print(min(dp))    

写在最后

alt

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

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

相关文章

网络协议与攻击模拟_16HTTP协议

1、HTTP协议结构 2、在Windows server去搭建web扫描器 3、分析HTTP协议流量 一、HTTP协议 1、概念 HTTP&#xff08;超文本传输协议&#xff09;用于在万维网服务器上传输超文本&#xff08;HTML&#xff09;到本地浏览器的传输协议 基于TCP/IP(HTML文件、图片、查询结构等&…

Windows Anaconda 运行 gempy examples。示例::

默认读者已安装&#xff1a;Anaconda. 若未安装请参考以下文章&#xff1a; Windows中如何使用 Anaconda 和 gempy地质建模 1&#xff0c;打开Anaconda Navigator: 打开后如此&#xff1a; 运行JupyterLab: launch。 打开gempy example 建模示例&#xff1a; 官方地址&#x…

Linux diff命令

参考资料 【 diff 】コマンド&#xff08;基本編&#xff09;――テキストファイルの差分を出力する便利なdiffコマンド使い方 目录 前期准备一. 基本语法二. 文件比较2.1 无配置项2.2 -B 忽略空行&#xff0c;-w忽略空格2.3 -y 文件内容横向比较显示2.4 -q 仅显示文件是否不同…

AlmaLinux右键菜单(基于GNOME桌面)

文章目录 前言前提说明在文件上右键在文件夹上右键 前言 在使用VSCode的过程中&#xff0c;AlmaLinux没能像Windows一样在右键菜单上显示打开方式&#xff0c;所以找了一下解决方案&#xff0c;罗列出来 前提说明 虽然说无论是media还是StackOverflow都推荐使用这条命令&…

2024年华为OD机试真题-多段线数据压缩-Java-OD统一考试(C卷)

题目描述: 下图中,每个方块代表一个像素,每个像素用其行号和列号表示。 为简化处理,多段线的走向只能是水平、竖直、斜向45度。 上图中的多段线可以用下面的坐标串表示:(2, 8), (3, 7), (3, 6), (3, 5), (4, 4), (5, 3), (6, 2), (7, 3), (8, 4), (7, 5)。 但可以发现,这…

Stable Diffusion 模型下载:majicMIX lux 麦橘辉耀 - V3

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

王树森《RNN Transformer》系列公开课

本课程主要介绍NLP相关&#xff0c;包括RNN、LSTM、Attention、Transformer、BERT等模型&#xff0c;以及情感识别、文本生成、机器翻译等应用 ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com) &#xff08;一&#xff09;NLP基础 1、数据处理基础 数…

【DDD】学习笔记-统一语言与领域分析模型

无论你采用什么样的软件开发过程&#xff0c;对于一个复杂的软件系统&#xff0c;都必然需要通过分析阶段对问题域展开分析&#xff0c;如此才能有的放矢地针对该软件系统的需求寻找设计上的解决方案。在领域驱动设计中&#xff0c;分析阶段完全围绕着“领域”为中心展开&#…

RabbitMQ(保姆级教程)

RabbitMQ学习 基础 1. 同步通信和异步通信 同步调用 下一步动作必须依赖上一步 异步调用 通知到位就行&#xff0c;不对消费者做强制要求&#xff0c;只要求最终一致性就行 2. MQ技术选项 消息先进先出&#xff0c;RabbitMQ默认有序 Erlang 是面向并发&#xff0c…

STM32 + ESP8266,连接阿里云 上报/订阅数据

&#xff08;文章正在编辑中&#xff0c;一点点地截图操作过程&#xff0c;估计要拖拉两三天&#xff09; 一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是AT固件。连接阿里云&#xff0c;需要使用MQTT固件。 1、独立EPS8266模块的烧录方法 2、魔女开发板&#xff0c;板载…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧&#xff1a; 1.我们一定有n个向下&#xff0c;为 2.我们挑最大的两个&#xff0c;条件是他们奇偶性相同&#xff0c;为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法&#xff0c;为 5.问题等价于23个相同的球放到3个盒子里&#xff0c;每个盒子至少…

【北邮鲁鹏老师计算机视觉课程笔记】04 fitting 拟合

【北邮鲁鹏老师计算机视觉课程笔记】04 fitting 拟合 1 拟合的任务 如何从边缘找出真正的线&#xff1f; 存在问题 ①噪声 ②外点、离群点 ③缺失数据 2 最小二乘 存在的问题 3 全最小二乘 度量的是点到直线的距离而不是点在y方向到直线的距离 提示&#xff1a;点到直线的…

ChatGPT偷懒、变慢的罪魁祸首竟然是它?!系统提示词塞满垃圾!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【Java程序设计】【C00263】基于Springboot的分布式架构网上商城(有论文)

基于Springboot的分布式架构网上商城&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的网上商城 本系统分为管理员功能模块以及系统功能模块。 系统功能模块&#xff1a;在系统首页可以查看首首页、商品信息、购物…

【Git】移除Git中的文件

有的时候需要移除或者更新 Git 中的文件&#xff0c;我们无法直接在远程仓库中移除&#xff0c;移除或者更新操作需要在本地端实现。 1、移除被跟踪文件 当某个文件被添加到暂存区或者本地仓库&#xff0c;此时会被标记为“跟踪状态”&#xff0c;此时 Git 就会代为管理这个文…

肿瘤微环境异质性对治疗反应的影响(综述)

Influence of tumour micro-environment heterogeneity on therapeutic response | Nature 肿瘤的形成涉及肿瘤细胞与细胞外基质、肿瘤血管和免疫细胞的共同进化。肿瘤的成功生长和最终转移并不完全取决于肿瘤细胞的基因改变&#xff0c;还取决于这种突变在特定环境中带来的适…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

STM32F1 引脚重映射功能

STM32 端口引脚重映射 文章目录 STM32 端口引脚重映射前言1、查阅芯片数据手册1.1 串口引脚重映射描述 2、代码部分2.1 核心代码部分 3、实验现象4、总结 前言 在写程序时遇到想要的端口功能&#xff0c;而这个引脚又被其它的功能占用了无法删除掉或直接使用&#xff0c;这种情…

Netty应用(三) 之 NIO开发使用 网络编程 多路复用

目录 重要&#xff1a;logback日志的引入以及整合步骤 5.NIO的开发使用 5.1 文件操作 5.1.1 读取文件内容 5.1.2 写入文件内容 5.1.3 文件的复制 5.2 网络编程 5.2.1 accept&#xff0c;read阻塞的NIO编程 5.2.2 把accept&#xff0c;read设置成非阻塞的NIO编程 5.2.3…

基础IO[一]

文件文件内容属性 文件在硬盘上放着&#xff0c;我们的流程->写代码->编译->运行->访问文件。那么本质上是谁在访问&#xff1f; 是进程在访问。进程访问文件是需要通过接口来访问。 文件在磁盘上放着&#xff0c;要向硬件写入文件&#xff0c;谁有权限呢?必须…