牛客小白月赛94 解题报告 | 珂学家 | 茴字有36种写法


前言

很久没写题解了,有幸参加了94小白月赛内测,反馈是很nice,AK场。

争议的焦点在于哪题最难

  • D题
  • E题(没有F题)
  • F题(没有E题)

你选哪题呢?

alt



题解


欢迎关注

珂朵莉 牛客周赛专栏

珂朵莉 牛客小白月赛专栏


A. 小苯的九宫格

思路: 映射 + 模拟

grid = []
for _ in range(3):
    arr = input().split()
    grid.append(arr)

s = input()
r = []
for c in s:
    p = ord(c) - ord('0')
    h = (p - 1) // 3
    w = (p - 1) % 3
    r.append(grid[h][w])
print (''.join(r))

B. 小苯的好数组

切入点: 寻找相邻元素的逆序对

n = int(input())
arr = list(map(int, input().split()))

flag = False
for i in range(n - 1):
    if arr[i] > arr[i + 1]:
        flag = True
        break

print (n if flag else 0)

C. 小苯的数字合并

思路: 贪心+枚举

从贪心的角度,因为数组的数都是非负数,所以最小数一定是数组中的某个元素,最大数则是左右两侧和的最大值

如果这题数组中存在负数,那该如何解?

n = int(input())

arr = list(map(int, input().split()))

res = 0
s = arr[0]
for i in range(1, n - 1):
    s += arr[i]
    res = max(res, abs(s - arr[i + 1]))

s = arr[n - 1]
for i in range(n - 2, 0, -1):
    s += arr[i]
    res = max(res, abs(s - arr[i - 1]))

print (res)

D. 小苯的排列构造

1~N的排列,其GCD一定收敛很快

A 数列的不同元素个数不会超过 l o g 2 ( 1 0 5 ) = 16 个 A数列的不同元素个数不会超过 log_2(10^5) = 16 个 A数列的不同元素个数不会超过log2(105)=16

这就是贪心的核心点:

所以大部分 A 数列,尾巴一定都是 1 ,所以后续 P 序列的数其顺序就不重要的 所以大部分A数列,尾巴一定都是1,所以后续P序列的数其顺序就不重要的 所以大部分A数列,尾巴一定都是1,所以后续P序列的数其顺序就不重要的

那如何构造呢?

可以从分组的角度,然后按倍数递增

所以这样的时间复杂度 O ( c n ) , c ≤ 18 O(cn), c\le18 O(cn),c18

也可以引入验证函数,来快速过滤无解的情况

def check():
    prev = arr[0]
    for i in range(1, n):
        if prev < arr[i] or prev % arr[i] != 0:
            return False
        prev = arr[i]
    return True

def solve():
    vis = [False] * (n + 1)
    res = []
    # 分组循环
    i = 0
    while i < n:
        j = i + 1
        while j < n and arr[i] == arr[j]:
            j += 1
        k = 1
        tmp = []
        while len(tmp) < j - i and k * arr[i] <= n:
            if not vis[k * arr[i]]:
                vis[k * arr[i]] = True
                tmp.append(k *arr[i])
            k += 1
        if len(tmp) != j - i:
            return [-1]
        res.extend(tmp)    
        i = j
    return res

n = int(input())
arr = list(map(int, input().split()))

if check():
    res = solve()
    print (*res)
else:
    print (-1)

E. 小苯的01背包(easy)

方法一: 期望法贪心

从价值的角度出发

枚举期望的价值(从大到小),然后尝试去构造

由于与操作的特点,越与越小,所以全部都要(小孩子才做选择题)。

纯思维题,也是最简单的解法

n, k = list(map(int, input().split()))
 
pack = []
for _ in range(n):
    v, w = list(map(int, input().split()))
    pack.append((v, w))
    
def solve():
    for s in range(2000, 0, -1):
        tmp = 0xffffff
        for (v, w) in pack:
            if (s & w) == s:
                tmp &= v
        if tmp <= k:
            return s
    return 0

print (solve())

方法二:BFS + 最优性剪枝

也是欺负数据小

看着像 O ( n 3 ) O(n^3) O(n3), 但是hack不掉。

n, k = list(map(int, input().split()))

res = 0
pack = []
for _ in range(n):
    v, w = list(map(int, input().split()))
    pack.append((v, w))
    if v <= k:
        res = max(res, w)

        
pack.sort(key=lambda x: -x[0])
st = set()
st.add((0x0ffffffff, 0x0ffffffff))

for (v, w) in pack:
    if v <= k:
        continue
    if w <= res:
        continue
    st2 = set()
    st2.add((v, w))
    for (k1, v1) in st:
        if (v & k1) <= k:
            res = max(res, w & v1)
        elif (w & v1) > res:
            st2.add((k1&v, w&v1))
        if v1 > res:
            st2.add((k1, v1))
    st = st2
print (res)

这个解法,轻松过easy范围

alt

甚至在hard的值域范围下,也是很无敌的存在

alt


方法三: 试填法

位运算相关的题,很经典的解法和思路

n, k = list(map(int, input().split()))
 
res = 0
pack = []
for _ in range(n):
    v, w = list(map(int, input().split()))
    pack.append((v, w))
    if v <= k:
        res = max(res, w)
 
# 试填法
mask = 0
for i in range(29, -1, -1):
    mask += 1 << i
    fv = (1 << 30) - 1
    for (v, w) in pack:
        if (mask & w) == mask:
            fv &= v
    if fv <= k:
        pass
    else:
        mask -= 1 << i
     
print (mask)

F. 小苯的01背包(hard)

详见 E 中的方法三: 试填法

剩下的33种方法,只有聪明的人才能看到…


写在最后

alt

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

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

相关文章

element-ui 前端ui框架用法开发指南(2024-05-22)

Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 1、npm安装 // npm安装&#xff1a;npm install element-ui --save 能更好地和 webpack 打包工具配合使用 2、cdn在线引入 访问最新版本的资源地址 - element-uiThe CDN for element-u…

ComfyUI完全入门:图生图局部重绘

大家好&#xff0c;我是每天分享AI应用的萤火君&#xff01; 这篇文章的主题和美女有关&#xff0c;不过并不是教大家生产美女视频&#xff0c;而是讲解 ComfyUI 的图生图局部重绘&#xff0c;其中将会以美女图片为例&#xff0c;来展示局部重绘的强大威力。 先看看效果&…

[机缘参悟-187] - 《道家-水木然人间清醒1》读书笔记 - 真相本质 -10- 关系界限 - 一个人只有放下自我,才能看清世界的真相

目录 一、现实生活中&#xff0c;每个人都是盲人摸象 二、一个人认知的本质是神经网络的模型训练 三、每个人的认知具有局限 四、放下自我&#xff0c;就是跳出自我的认知局限 五、站在上帝的视角&#xff0c;俯瞰不同众生的千差万别的大脑认知系统 六、个体的独特性&…

Linux驱动(2)---Linux内核的组成

1.Linux内核源码目录 arch包含和硬件体系相关结构相关源码&#xff0c;每个平台占用一个目录 block&#xff1a;块设备驱动程序I/O调度 crypto&#xff1a;常用加密和三列算法&#xff0c;还有一些压缩和CRC校验算法。 documentation:内核个部分的通用解释和注释.。 drive…

访存优化实践之一 : CPU、GPU、DDR与访存路径介绍

一、CPU的访存路径 上图是目前主流的CPU架构介绍。可以看到,CPU的访存路径:先经过MMU,然后经过Cache,最后到达DRAM。这其中涉及到的关键内容为基于MMU的内存管理以及缓存机制。 1.1、基于MMU的内存管理 众所周知,在计算机设计之处是没有虚拟地址的概念的,CPU发出的地址即…

cocosCreator动态生成二维码

cocosCreator 版本&#xff1a;3.7.2 开发语言&#xff1a;typeScript 我们在游戏开发中&#xff0c;经常会生成一个专属于玩家个人的二维码&#xff0c;比如说推广、充值等功能。 接到这个任务&#xff0c;在网上找了下&#xff0c;还是有很多教程的。但是这些教程大部分都是用…

【全网最全】2024电工杯数学建模B题53页成品论文+完整matlab代码+完整python代码+数据预处理+可视化结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模B题53页成品论文完整matlab、py代码19建模过程代码数据等&#xff08;后续会更新&#xff09;「首先来看看目前已有的资…

未来十年,IT行业的无限可能!

未来十年&#xff0c;IT行业的无限可能&#xff01; &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学…

docker- 镜像 导出导入

文章目录 前言docker- 镜像 导出导入1. 导出2. 删除镜像3. 导入镜像 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

二叉树基于队列实现的操作详解

一、队列知识补充 有关队列的知识请详见博主的另一篇博客&#xff1a;http://t.csdnimg.cn/3PwO4 本文仅仅附上需要的队列操作供读者参考 //结构体定义 typedef struct BinaryTreeNode* QDataType;typedef struct QueueNode {struct QueueNode* next;QDataType val; }QNode;…

使用VirtualBox+vagrant创建CentOS7虚拟机

1.VirtualBox 1.1.什么是VirtualBox VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发&#xff0c;由Sun Microsystems公司出品的软件&#xff0c;使用Qt编写&#xff0c;在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。 1.2.下载Virtual…

国产信创数据库:使用MySQL等开源产品能做信创替换吗?

随着信创关键行业替代加速推进&#xff0c;多数企业习惯原来标配即&#xff1a;centosmysql等开源产品&#xff0c;而大家讨论核心焦点在于“什么是信创数据库”&#xff0c;使用 MySQL 能做信创替换吗&#xff1f;基于开源二开的数据库算信创库吗&#xff1f;等等。想来这个问…

第十一届蓝桥杯物联网试题(国赛)

国赛题目看着简单其实还是挺复杂的&#xff0c;所以说不能掉以轻心&#xff0c;目前遇到的问日主要有以下几点&#xff1a; 本次题主要注重的是信息交互&#xff0c;与A板通信的有电脑主机和B板&#xff0c;所以处理好这里面的交互过程很重要 国赛中避免不了会收到其他选手的…

H3CNE-6-ICMP数据包分析

ICMP&#xff1a;Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type&#xff1a;表示ICMP消息类型 Code&#xff1a;表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

Ollydbg动态分析MessageBoxA输出hellow world

一、目的 找到main函数找到调用的MessageBoxA函数 测试源码 #include <iostream> #include <windows.h>int main() {MessageBoxA(NULL, "Hellow World", "Title", MB_OK);return 1; }二、快捷键 指令快捷键说明RestartCtrlF2重新开始调试S…

【Qt】Qt多元素控件深入解析与实战应用:列表(QListWidget)、表格(QTableWidget)与树形(QTreeWidget)结构

文章目录 前言&#xff1a;Qt中多元素控件&#xff1a;1. List Widget1.1. 代码示例: 使用 ListWidget 2.Table Widget2.1. 代码示例: 使用 QTableWidget 3. Tree Widget3.1. 代码示例: 使用 QTreeWidget 总结&#xff1a; 前言&#xff1a; 在Qt框架中&#xff0c;用户界面的…

mac下安装airflow

背景&#xff1a;因为用的是Mac的M芯片的电脑&#xff0c;安装很多东西都经常报错&#xff0c;最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中&#xff0c;发现airflow好像是个不错的选择&#xff0c;然后就研究怎么先安装使用起来&#xff0c;后面再…

Django5+React18前后端分离开发实战05 序列化

Django REST Framework We will use the Django REST Framework to help build our API. 我们会使用 Django REST Framework 框架来构建我们的API。 You can build APIs on your own in Django but it will take a lot of work. 你可以使用Django自己构建API&#xff0c;但是…

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了&#xff0c;但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的&#xff0c;很可能会退化为单分支的情况&#xff0c;那样效率就极低了&#xff0c;那么有没有方法来弥补二叉搜索树的缺陷呢&#xff1f; 那么AVL树就出现了&…

nuxt: generate打包后访问资源404问题

现象 使用Nuxt.js开发的个人页面&#xff0c;部署到nginx服务器中&#xff0c;/_nuxt/*.js、/_nuxt/*.css等静态问题不能访问&#xff0c;提示404错误。 而我们的这些资源文件是存在的。 解决方法 加上此处代码进行上下文配置 baseURL: /nuxt/ 此时在nginx配置 /nuxt 代理 lo…