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

news2024/11/17 11:21:09

前言

很久没写题解了,有幸参加了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

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

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

相关文章

驱动与系统学习网址

DRM&#xff08;Direct Rendering Manager&#xff09;学习简介-CSDN博客 Android Qcom Display学习(零)-CSDN博客 https://blog.csdn.net/hexiaolong2009/category_9705063.htmlhttps://blog.csdn.net/hexiaolong2009/category_9705063.htmlRender Hell —— 史上最通俗易懂…

OA界面这么香吗?总有老铁私信,让我多发点,他好参考。

OA的确是B端系统应用最为广泛的一种&#xff0c;这次再给大家分享十来个页面&#xff0c;希望对他们的界面提升有所帮助。 举报 评论 3

2024 一键批量下载微博内容/图片/视频/评论/转发数据,导出excel和pdf

以李健的微博为例&#xff0c;抓取2010-2024年所有的微博数据excel&#xff0c;包含微博链接&#xff0c;微博内容&#xff0c;发布时间&#xff0c;点赞数&#xff0c;转发数&#xff0c;评论数&#xff0c;话题等。 每个月的微博转评赞总数曲线&#xff0c;2015年是高峰。 微…

[OpenGL] opengl切线空间

目录 一 引入 二 TBN矩阵 三 代码实现 3.1手工计算切线和副切线 3.2 像素着色器 3.3 切线空间的两种使用方法 3.4 渲染效果 四 复杂的物体 本章节源码点击此处 继上篇法线贴图 来熟悉切线空间是再好不过的。对于法线贴图来说,我们知道它就是一个2D的颜色纹理,根据rgb…

Go语言的命名规范是怎样的?

文章目录 Go语言的命名规范详解一、标识符命名规范示例代码 二、包名命名规范示例代码 三、变量命名规范示例代码 四、常量命名规范示例代码 五、函数命名规范示例代码 总结 Go语言的命名规范详解 在Go语言中&#xff0c;代码的命名规范对于项目的可读性、可维护性和可扩展性至…

智能体之斯坦福AI小镇(Generative Agents: Interactive Simulacra of Human Behavior)

相关代码地址见文末 论文地址&#xff1a;Generative Agents: Interactive Simulacra of Human Behavior | Proceedings of the 36th Annual ACM Symposium on User Interface Software and Technology 1.概述 论文提出了一种多个智能体进行协同&#xff0c;进而模拟可信的人…

Java中String类型的大小

java对象在HotSpot虚拟机中的结构 Java对象由三部分组成&#xff0c;对象头、实例数据、填充数据。 对象头 markwork 存储对象运行时数据&#xff0c;HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向锁ID、偏向时间戳等。在64位虚拟机中&#xff0c;如果没有开启压缩指…

数据库系统基础知识

一、基本概念 二、数据库三级模式两级映像 三、数据库的分析与设计过程 四、数据模型 五、关系代数 六、数据库完整性约束 七、关系型数据库SQL简介 八、关系数据库的规范化 九、数据库的控制功能 十、数据仓库与数据挖掘基础 十一、大数据基本概念 数据库基本概念 1、数据库…

论文笔记:GPT4Rec: Graph Prompt Tuning for Streaming Recommendation

SIGIR 2024 1 intro 1.1 背景 传统推荐系统方法在实际应用中往往未能兑现基准数据集所做的承诺 这种差异主要源于传统的离线训练和测试方法在这些场景中&#xff0c;模型在大型静态数据集上训练&#xff0c;然后在有限的测试集上评估&#xff0c;这一过程没有考虑到现实世界…

第二十届文博会沙井艺立方分会场启幕!大咖齐打卡!

2024年5月24日-27日&#xff0c;第二十届中国&#xff08;深圳&#xff09;国际文化产业博览交易会沙井艺立方分会场活动将在艺立方非遗&#xff08;文旅&#xff09;产业园盛大举办。 本届文博会艺立方分会场活动办展特色鲜明&#xff0c;亮彩纷呈&#xff0c;将以“种下梧桐树…

留学培训行业PaaS应用系统架构的设计与实践

随着留学需求的增长和教育培训市场的不断扩大&#xff0c;留学培训行业正面临着越来越多的挑战和机遇。在这个背景下&#xff0c;利用PaaS&#xff08;Platform as a Service&#xff09;平台来构建留学培训行业的应用系统架构&#xff0c;将成为提升服务质量和效率的重要手段。…

工厂生产管理系统

为应对一些国内验厂&#xff0c;如大疆等&#xff0c;他们需要客户有自己的生产管理系统的&#xff0c;但实际很多公司是没有引入ERP这类的系统的&#xff0c;从而想开发一套简单的生产管理系统。 参考了网上一个比较古老的StorageMange项目&#xff0c;此项目用到DevExpress的…

「探讨」:什么是网络审计?好用的网络审计系统推荐【图文详解】

网络是企业运营、政府管理、个人生活不可或缺的基础设施。 然而网络安全问题却日益凸显&#xff0c;数据泄露、网络攻击、欺诈行为等风险日益严重。 一、网络审计的定义 网络审计&#xff0c;又称信息技术审计或电子审计&#xff0c;是指审计人员运用专业技能和工具&#xff…

亚马逊测评技术自己掌控:打造爆款产品,快速突破销量瓶颈

不管新老店铺来说&#xff0c;出单都是至关重要的&#xff0c;在我们的理解当中测评应该是一种成长剂&#xff0c;是一个加快店铺成长的工具&#xff0c;因为它在店铺的破0、突破瓶颈期、引爆爆款以及在后期店铺的一个补量上都会有一个明显的作用 测评有什么意义&#xff1f; …

简历–工作经历–通用

雇主将会很注意简历中的工作经历这一部分。在看完求职目标后&#xff0c;他们想了解你的历史&#xff0c;你曾在哪儿工作&#xff0c;工作了多长时间。他们想弄明白的是“你是个稳定可靠的人吗&#xff1f;”&#xff0c;“你发挥出的才能有哪些&#xff1f;”最重要的是你是否…

python-找出四位数中的玫瑰花数

【问题描述】玫瑰花数指一个n位数&#xff08;n>4),其每位上的数字的n次幂之和等于本身。 请求出所有四位数中的玫瑰花数 【输入形式】 【输出形式】 【样例输入】 【样例输出】1634 8208 9474 【样例说明】 【评分标准】 完整代码如下&#xff1a; for n in ra…

android实现PhotoShop里的魔棒效果

魔棒是画板工具一个重要的功能&#xff0c;非常实用&#xff0c;只要轻轻一点&#xff0c;就能把触摸到的颜色区域选中&#xff0c;做复制、剪切、擦除等工作。 那怎么实现呢&#xff1f; 先来看看效果&#xff1a; 要实现这个效果&#xff0c;需要对安卓canvas和paint理解比…

【研发日记】【策划向】(一)游戏策划其实就是一道加减法题

文章目录 序设计的过程其实是控制自己欲望的过程我海纳百川&#xff0c;你要不要看看&#xff1f;我跟别人不一样&#xff01;我的人设就是没有人设&#xff0c;或者说任何人设都是我的人设 记 序 不知不觉进入这个行业几年了&#xff0c;也经历了独立开发和团队开发的过程。在…

【SQL】外连接 LEFT JOIN

目录 一.内连接与外连接 1.内连接&#xff08;inner join&#xff09; 2.外连接&#xff08;outer join&#xff09; 二.两表连接 1.我们先来试试看内连接&#xff1a; 2.我们再来试试外连接 三.单表外连接 四.总结 一.内连接与外连接 先得介绍内连接和外连接两个概念&…

git回退到指定版本,同时提交记录也会删除

第一步&#xff1a; git reset --hard xxx (需要恢复版本的 commit id)第二步&#xff1a;branch_name就是远程分支的名称 git push origin <branch_name> --force