牛客小白月赛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) // 3w = (p - 1) % 3r.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 = Truebreakprint (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 Falseprev = arr[i]return Truedef solve():vis = [False] * (n + 1)res = []# 分组循环i = 0while i < n:j = i + 1while j < n and arr[i] == arr[j]:j += 1k = 1tmp = []while len(tmp) < j - i and k * arr[i] <= n:if not vis[k * arr[i]]:vis[k * arr[i]] = Truetmp.append(k *arr[i])k += 1if len(tmp) != j - i:return [-1]res.extend(tmp)    i = jreturn resn = 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 = 0xfffffffor (v, w) in pack:if (s & w) == s:tmp &= vif tmp <= k:return sreturn 0print (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:continueif w <= res:continuest2 = 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 << ifv = (1 << 30) - 1for (v, w) in pack:if (mask & w) == mask:fv &= vif fv <= k:passelse:mask -= 1 << iprint (mask)

F. 小苯的01背包(hard)

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

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


写在最后

alt

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

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

相关文章

手机相册的照片彻底删除了怎么恢复?删除照片恢复的5种方法

在数字化时代&#xff0c;手机相册里装满了我们的生活点滴和珍贵回忆。然而&#xff0c;一不小心就可能误删那些意义非凡的照片。别担心&#xff0c;今天小编就给大家介绍5种恢复误删照片的方法&#xff0c;让你的回忆不再丢失&#xff01; 方法一&#xff1a;相册App的“最近删…

Docker Compose使用

Docker-Compose是什么 docker建议我们每一个容器中只运行一个服务,因为doker容器本身占用资源极少&#xff0c;所以最好是将每个服务单独分割开来&#xff0c;但是这样我们又面临了一个问题&#xff1a; 如果我需要同时部署好多个服务&#xff0c;难道要每个服务单独写Docker…

P4097 【模板】李超线段树 / [HEOI2013] Segment 题解

题意 有一个平面直角坐标系&#xff0c;总共 n n n 个操作&#xff0c;每个操作有两种&#xff1a; 给定正整数 x 0 , y 0 , x 1 , y 1 x_0,y_0,x_1,y_1 x0​,y0​,x1​,y1​ 表示一条线段的两个端点。你需要在平面上加入这一条线段&#xff0c;第 i i i 条被插入的线段的标…

Photoshop插件(UXP)编写过程中,如何更新sp-checkbox的选中状态

✨问题说明 sp-checkbox是uxpSpectrum UXP Widgets下的一个小组件&#xff0c;内置样式大概是这样&#xff1a; 那么&#xff0c;如果用js动态的改变选中的状态&#xff0c;应该如何做呢&#xff1f; 如果直接是html来写&#xff1a; <sp-checkbox checked>Checked<…

特斯拉FSD的「端到端」到底能不能成?

引言 近年来&#xff0c;特斯拉的全自动驾驶&#xff08;Full Self-Driving&#xff0c;FSD&#xff09;技术备受关注&#xff0c;尤其是其「端到端」的AI软件框架更是引发了广泛讨论。端到端技术到底是一条正确的路径吗&#xff1f;它能否真正实现完全自动驾驶&#xff1f;本…

Echarts 实现将X轴放在图表顶部并且自动播放展示提示信息内容

文章目录 需求分析效果预览需求 如下图所示,实现柱状图中反转倒着绘制 分析 使用 ECharts 来实现对 Y 轴的倒序排序时,可以通过设置 yAxis 的 inverse 属性为 true 来实现。以下是一个简单的示例,演示了如何使用 ECharts 来创建一个柱状图,并将 Y 轴进行倒序排序:并且…

前缀和算法:提升编程效率的秘密武器(Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

代码审计--一道简单的文件包含题目的多种利用方式

NO.1 传统方法 首先来看下代码 <?php error_reporting(0); if(isset($_GET["file"])){include($_GET["file"]); }else{highlight_file(__FILE__);phpinfo(); } ?>看完代码后再来学习学习函数吧&#xff0c;毕竟菜啊&#xff01;&#xff01;&…

NASA数据集——阿尔法喷气式大气实验甲醛(HCHO)数据

Alpha Jet Atmospheric eXperiment Formaldehyde Data 简介 阿尔法喷气式大气实验甲醛数据 阿尔法喷气式大气实验&#xff08;AJAX&#xff09;是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达和太平洋沿岸地区的…

【NOIP2014普及组复赛】题4:子矩阵

题3&#xff1a;子矩阵 【题目描述】 给出如下定义&#xff1a; 1.子矩阵&#xff1a;从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵&#xff08;保持行与列的相对顺序&#xff09;被称为原矩阵的一个子矩阵。 例如&#xff0c;下面左图中选取第 2 、 4 2、4 2、…

vue项目中使用json编辑器

实现效果&#xff1a; 借助插件json-editor-vue3实现效果如图一&#xff0c;如果嫌丑可以通过类名改一下样式如图二。 实现过程&#xff1a; 安装插件&#xff1a;npm install json-editor-vue3 文档链接&#xff1a;GitCode - 开发者的代码家园 <script setup name&quo…

AcWing 3466. 清点代码库(STL:map,vector)

3466. 清点代码库 需要求有几种不同数列&#xff0c;每种有多少个&#xff0c;可以想到用map。它的键是一个数列&#xff0c;可以把它放在vector里。也就是map<vector<int>,int> 要满足要求的输出序列&#xff0c;就要想把它放在其他容器&#xff0c;或数组里&…

Vite + Vue3 部署 GitHub

因为静态资源是可以部署到 GitHub 上&#xff0c;自己顺便学习部署网站 因为我使用的是 Vite 工具&#xff0c;官方有提供相应 Demo 部署静态站点 | Vite 官方中文文档 新建文件夹 .github 然后再建一个文件夹 workflows 新建文件 main.yml 文件 直接使用官方文档 demo #…

如何处理时间序列的缺失数据

您是否应该删除、插入或估算&#xff1f; 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉&#xff1a; df.info()看到类似这样的内容&#xff1a; 大多数 ML 模型无法处理 NaN 或空值&#xff0c;因此如果您的特征或目标包含这些值&#xff0c;则在…

Java-MySql:JDBC

目录 JDBC概述 JDBC搭建 1、导入mysql开发商提供的jar包 2、注册驱动 3、与数据库连接 注解&#xff1a; Statement&#xff1a; 代码 运行 PreparedStatement&#xff1a; 代码 运行 PreparedStatement和Statement Statement 增 代码 运行 删 代码 运…

九、图形化脚本

多年来&#xff0c; shell脚本一直都被认为是枯燥乏味的。但如果你准备在图形化环境中运行脚本时&#xff0c;就未必如此了。有很多与脚本用户交互的方式并不依赖read和echo语句。 9.1 创建文本菜单 创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户…

AI遇上遥感,未来会怎样?

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

基于MetaGPT构建LLM多智能体

前言 你好&#xff0c;我是GISer Liu&#xff0c;在上一篇文章中&#xff0c;我们用了两万多字详细拆解了单个Agent的组成&#xff0c;并通过Github Trending订阅智能体理解MetaGPT框架的订阅模块如何解决应用问题&#xff0c;但是对于复杂&#xff0c;并行的任务&#xff0c;单…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

JavaSE——集合框架二(1/6)-前置知识-可变参数、Collections工具类

目录 可变参数 Collections工具类 Collections的常用静态方法 实例演示 可变参数 可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;格式是&#xff1a;数据类型...参数名称 可变参数的特点和好处 特点&#xff1a;可以不传数据给它&am…