牛客周赛 Round 47 解题报告 | 珂学家

news2024/11/25 4:36:08

前言

alt


题解

这真的是牛客周赛? 哭了


欢迎关注

珂朵莉 牛客周赛专栏

珂朵莉 牛客小白月赛专栏


A. 小红的葫芦

签到题

但是写起来有点变扭,方法应该蛮多的

统计分组

  • 有2组
  • 一组长度为2,一组长度为3
def check(arr):
    arr.sort()
    if arr[0] == arr[4]:
        return False
    if arr[0] == arr[1] and arr[2] == arr[4]:
        return True
    if arr[0] == arr[2] and arr[3] == arr[4]:
        return True
    return False

arr = list(map(int, input().split()))
print ("YES" if check(arr) else "NO")

B. 茉茉的密码

思路: 贪心构造

如果s满足要求,s的子串sa,必然满足要求

这样,可以贪心枚举26个字符

n = int(input())

arr = []
for _ in range(n):
    arr.append(input())
    
def check(c, arr):
    for s in arr:
        if c not in s:
            return False
    return True

for i in range(26):
    c = chr(ord('a') + i)
    if check(c, arr):
        print (c)
        break

C. 苗苗的气球

思路: 众数贪心

  • 特判n=1,n=2的情况

  • 枚举每种气球

这个时候,其实只需要讨论当前的气球A,其他的剩余B,其他中的众数C

那ABC满足什么条件,可以保证A有剩余

还要考虑奇偶,因为对消有剩余

def check(a, b, c):
    if (b + c) % 2 == 0:
        if c <= b:
            return True
        elif a > (c - b):
            return True
    else:
        if c <= b:
            return 1 if a >= 2 else 0
        elif a > (c - b):
            return True            
    return False

当然这题,还要想想如何维护众数

引入前后缀拆解, 快速求解除自身以为的众数

n = int(input())

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

s = sum(arr)


def check(a, b, c):
    if (b + c) % 2 == 0:
        if c <= b:
            return True
        elif a > (c - b):
            return True
    else:
        if c <= b:
            return 1 if a >= 2 else 0
        elif a > (c - b):
            return True            
    return False

def solve():
    if n == 1:
        return 1
    elif n == 2:
        return 1 if arr[0] != arr[1] else 0
    pre = [0] * n
    suf = [0] * n

    # 前后缀拆解
    for i in range(1, n):
        pre[i] = max(pre[i - 1], arr[i])
    for i in range(n - 2, -1, -1):
        suf[i] = max(suf[i + 1], arr[i])

    res = 0
    for i in range(n):
        if i == 0:
            mx = suf[1]
            if check(arr[i], s - arr[i] - mx, mx):
                res += 1
        elif i == n - 1:
            mx = pre[n - 2]
            if check(arr[i], s - arr[i] - mx, mx):
                res += 1
        else:
            mx = max(pre[i - 1], suf[i + 1])
            if check(arr[i], s - arr[i] - mx, mx):
                res += 1
    return res
            
print (solve())

D. 萌萌的好数

思路: 二分+容斥+数位DP

感觉写复杂了,但是过了


# 容斥

t = int(input())

# 数位DP吗?
from functools import cache

@cache
def dfs(s, idx, acc, isLimit, isNum):
    if idx == len(s):
        return 1 if isNum and acc % 3 != 0 else 0
    r = 0
    if not isNum:
        r += dfs(s, idx + 1, 0, False, isNum)
    
    p = ord(s[idx]) - ord('0')
    if idx < len(s) - 1:
        start = 0 if isNum else 1
        end = p if isLimit else 9
        for i in range(start, end + 1):
            r += dfs(s, idx + 1, (acc+i) % 3, isLimit and i == end, True)
    else:
        if not isLimit:
            r += dfs(s, idx + 1, (acc + 3) % 3, False, True)
        else:
            if p >= 3:
                r += dfs(s, idx + 1, acc, p == 3, True)
        
    return r
        
    

def compute(x):
    z = x - x // 3
    # 最后一位为3
    s = str(x)
    m = len(s)
    
    z = z - dfs(s, 0, 0, True, False)
    dfs.cache_clear()
    return z
    
    

for _ in range(t):
    n = int(input())
    l, r = 1, n * 3
    while l <= r:
        m = (l + r) // 2
        if compute(m) < n:
            l = m + 1
        else:
            r = m - 1
    print (l)
        

E. 茜茜的计算器

思路: 容斥

横对称 + 纵对称 − ( 横 / 纵对称 ) 横对称+纵对称 -(横/纵对称) 横对称+纵对称(/纵对称)

但是这个式子太简单了

横对称的有1,3,8,0

纵对称的有25配对,52配置,00配对,88配对

n = int(input())

mod = 10 ** 9 + 7

r1 = pow(4, n, mod)
r2 = pow(4, n // 2, mod)
if n % 2 == 1:
    r2 = r2 * 2 % mod
    
r3 = pow(2, n // 2, mod)
if n % 2 == 1:
    r3 = r3 * 2 % mod

r = r1 + r2 - r3
print (r%mod)

F. 花花的地图

思路: dijkstra寻路

很典的题,之前看过的同类版本是

  • 破墙(一块)
  • 破墙(2*2)

这边是同列,因为h,w为100

这边遇到墙的时候,需要枚举一列来拓展状态点

所以大概的时间复杂度为 O ( n 3 + n 2 l o g n 2 ) O(n^3+n^2logn^2) O(n3+n2logn2)

h, w = list(map(int, input().split()))

grid = []
for _ in range(h):
    grid.append(input())
    
cost = list(map(int, input().split()))
    
from math import inf
import heapq

dp = [[inf] * w for _ in range(h)]

hp = []
if grid[0][0] == '.':
    heapq.heappush(hp, (0, 0, 0))
    dp[0][0] = 0
else:
    for i in range(h):
        heapq.heappush(hp, (cost[0], i, 0))
        dp[i][0] = cost[0]
        

while len(hp) > 0:
    c, y, x = heapq.heappop(hp)
    if c > dp[y][x]:
        continue
    
    for dy, dx in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
        ty, tx = y + dy, x + dx
        if 0 <= ty < h and 0 <= tx < w:
            if grid[ty][tx] == '.':
                if dp[ty][tx] > c:
                    dp[ty][tx] = c
                    heapq.heappush(hp, (dp[ty][tx], ty, tx))
            else:
                for j in range(h):
                    if dp[j][tx] > c + cost[tx]:
                        dp[j][tx] = c + cost[tx]
                        heapq.heappush(hp, (dp[j][tx], j, tx))

print (dp[h - 1][w - 1])

写在最后

alt

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

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

相关文章

数据结构试题 20-21

真需要就死记吧 二叉树遍历-先序(非递归)【图解代码】_哔哩哔哩_bilibili 解释一下步骤&#xff1a; 一个循环为&#xff1a; 1.取节点 2.放右子树 3.放左子树 每次循环&#xff0c;都要从栈里取出一个节点 先放右子树&#xff0c;再放左子树 那这道题就是&#xff0c;先放1&am…

内网Docker镜像无法使用?Debian/Ubuntu离线安装Dokcer

离线安装Docker 卸载冲突的包 for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done先删除docker sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin d…

DSP28335:独立按键控制LED灯

做任何事情不可操之过急&#xff0c;虽然我们可能在之前的单片机学过相关的原理&#xff0c;但是一个新的单片机依然有他的学习的地方&#xff0c;之前我觉得很简单&#xff0c;就跳过这个学习&#xff0c;结果到后面就很浮躁&#xff0c;导致后面的内容与这一章相连接的时候&a…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中&#xff0c;调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性&#xff0c;许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名&#xff0c;以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

.gitignore文件忽略的内容不生效问题解决

文章目录 ①&#xff1a;现象②&#xff1a;原因③&#xff1a;解决 ①&#xff1a;现象 在已经提交过的git管理的项目中&#xff0c; 新增加一个.gitignore文件&#xff0c;文件内忽略内容不生效或者修改.gitignore文件之后&#xff0c;文件内新增的忽略内容不生效 ②&#…

Dell戴尔灵越Inspiron 16 Plus 7640/7630笔记本电脑原装Windows11下载,恢复出厂开箱状态预装OEM系统

灵越16P-7630系统包: 链接&#xff1a;https://pan.baidu.com/s/1Rve5_PF1VO8kAKnAQwP22g?pwdjyqq 提取码&#xff1a;jyqq 灵越16P-7640系统包: 链接&#xff1a;https://pan.baidu.com/s/1B8LeIEKM8IF1xbpMVjy3qg?pwdy9qj 提取码&#xff1a;y9qj 戴尔原装WIN11系…

1.华为路由器-三层交换机-二层交换机组网连接

AR1配置GE 0/0/0接口IP [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0] [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei]iP route-static 192.168.0.0 16 1.1.1.2三层交换机配置如下 创建vlan [Huawei]vlan batch 10 20配置接口ip [Huawei]int g0/0/1 [Huawei…

【数据结构】排序(下)

个人主页~ 排序&#xff08;上&#xff09; 栈和队列 排序 二、常见排序的实现8、快速排序的优化9、非递归快速排序&#xff08;1&#xff09;基本思想&#xff08;2&#xff09;代码实现&#xff08;3&#xff09;时间复杂度&#xff08;4&#xff09;空间复杂度 10、归并排序…

第二篇: 掌握Docker的艺术:深入理解镜像、容器和仓库

掌握Docker的艺术&#xff1a;深入理解镜像、容器和仓库 1. 引言 1.1 简要介绍Docker的重要性 在当今快速发展的技术世界中&#xff0c;软件开发和部署的效率和可靠性是衡量成功的关键因素。Docker&#xff0c;作为一个开源的容器化平台&#xff0c;革新了软件的打包、分发和…

016基于SSM+Jsp的医院远程诊断系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

知识普及:什么是边缘计算(Edge Computing)?

边缘计算是一种分布式计算架构&#xff0c;它将数据处理、存储和服务功能移近数据产生的边缘位置&#xff0c;即接近数据源和用户的位置&#xff0c;而不是依赖中心化的数据中心或云计算平台。边缘计算的核心思想是在靠近终端设备的位置进行数据处理&#xff0c;以降低延迟、减…

如何看懂SparkUI?

Jobs页面 Stage页面 显示额外的指标和摘要指标&#xff1a; 摘要指标&#xff08;Summary Metrics&#xff09;统计了所有完成的任务的执行行为&#xff0c;包括执行时间、GC时间、输入输出信息等&#xff0c;并提供了最小值&#xff08;Min&#xff09;、第25百分位数&#xf…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人脸 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…

Java面向对象-final关键字

Java面向对象-final关键字 一、final1、修饰变量2、修饰方法3、修饰类4、案例 一、final 可以修饰变量、方法、类 1、修饰变量 final修饰一个变量&#xff0c;变量的值不可以改变&#xff0c;这个变量就变成一个字符常量&#xff0c;约定俗称的规定&#xff1a;名字大写。 f…

基于ChatGPT的大型语言模型试用心得

近年来&#xff0c;ChatGPT这样的大型语言模型&#xff0c;它如同一颗冉冉升起的新星&#xff0c;迅速在商业、教育、娱乐等多个领域照亮了创新的天空&#xff0c;极大地革新了我们的工作与日常生活。 最近我发现一些国内用户也能自由访问的中文ChatGPT APP。这个平台不仅提供…

python-pip配置镜像源加速下载Python包安装:快速配置pip源-国内加速源

&#x1f308;所属专栏&#xff1a;【pip】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞…

struts2框架漏洞

title: struts2框架漏洞 categories: 漏洞复现 abbrlink: 48203 date: 2024-06-14 15:45:27 前言知识 ognl表达式注入 对象导航图语言&#xff0c;用于访问对象的字段、方法。基于简化访问java对象属性和调用方法需求&#xff0c;实现字段类型转化等功能&#xff1b;访问列表…

基于Matlab的BP神经网络的车牌识别系统(含GUI界面)【W7】

简介&#xff1a; 本系统结合了图像处理技术和机器学习方法&#xff08;BP神经网络&#xff09;&#xff0c;能够有效地实现车牌的自动识别。通过预处理、精确定位、字符分割和神经网络识别&#xff0c;系统能够准确地识别各种车牌图像&#xff0c;并在智能交通管理、安防监控等…

Java | Leetcode Java题解之第155题最小栈

题目&#xff1a; 题解&#xff1a; class MinStack {Deque<Integer> xStack;Deque<Integer> minStack;public MinStack() {xStack new LinkedList<Integer>();minStack new LinkedList<Integer>();minStack.push(Integer.MAX_VALUE);}public void …

java问题解决: IDEA java 警告 源发行版 17 需要目标发行版 17

效果图 问题原因 jdk和你实际安装的jdk不匹配 解决问题 1.点击File -->Project Structure–>Project 修改这两处 2. 在Project Structure–>Modules中的红框位置都要调整对应版本 3、点击File–>settings–>java compile将对应框的版本修改成对应版本即可–改…