[解题报告] CSDN竞赛第23期

2023-05-16

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/37

1. 排查网络故障

题目

A地跟B地的网络中间有n个节点(不包括A地和B地),相邻的两个节点是通过网线连接。正常的情况下,A地和B地是可以连通的,有一天,A地和B地突然不连通了,已知只有一段网线出问题(两个相邻的节点)小明需要排查哪段网线出问题。他的排查步骤是:
1。 选择某个中间节点
2。 在这个节点上判断跟A地B地是否连通,用来判断那一边出问题

请问小明最少要排查多少次,才能保证一定可以找到故障网线

输入描述:

一个正整数 n (n <= 10^18),表示A地和B地之间的节点数

输出描述:

输出一个数字,代表保证一定可以找到故障网线的前提下,小明最少要排查多少次

输入样例:

2

输出样例:

2

解题报告

模拟,答案为 ⌈ l o g 2 ( n + 1 ) ⌉ \lceil log_2(n + 1) \rceil log2(n+1)⌉

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, n):
        if n < 2:
            return n
        import math
        n += 1
        result = int(math.log(n))
        while 2**result < n:
            result += 1
        return result


if __name__ == "__main__":
    n = int(input().strip())
    sol = Solution()
    result = sol.solution(n)
    print(result)

2. 零钱兑换

题目

给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币张数。 如果无解,请返回-1. 数据范围:数组大小满足 0 <= n <=10000 , 数组中每个数字都满足 0 < val <=10000,0 <= aim <=100000 要求:时间复杂度 O(n×aim) ,空间复杂度 O(aim)。

输入描述:

输入包括两行,第一行两个整数n(0<=n<=1000)代表数组长度和aim(0<=aim<=5000),
第二行n个不重复的正整数,代表arr(1 <= arri <=10^9)

输出描述:

输出一个整数,表示组成aim的最小货币数,无解时输出-1.

输入样例:

[5,2,3],20

输出样例:

4

解题报告

动态规划,设 f[i] 为组成 i 的最少货币数,初始时 f[i] = oo,则 f[i] = min{f[i - j] + 1}, 其中 j 遍历 arr 中每个值

若 f[aim] > oo 则答案为 -1 否则为 f[aim]

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, str1):
        arr, aim = eval(str1)
        f = [aim + 1] * (aim + 1)
        f[0] = 0
        for i in range(1, aim + 1):
            for j in arr:
                if j <= i:
                    f[i] = min(f[i], f[i - j] + 1)
        if f[aim] > aim:
            return -1
        return f[aim]


if __name__ == "__main__":
    str1 = input().strip()
    sol = Solution()
    result = sol.solution(str1)
    print(result)

3. 清理磁盘空间

题目

小明电脑空间满了,决定清空间。为了简化问题,小明列了他个人文件夹(/data)中所有末级文件路径和大小,挑选出总大小为 m 的删除方案,求所有删除方案中,删除操作次数最小是多少。

一次删除操作:删除文件或者删除文件夹。如果删除文件夹,那么该文件夹包含的文件都将被删除。
文件夹的大小:文件夹中所有末级文件大小之和

输入描述:

第一行输入 n (n <= 1000)和 m(m <= 1000),表示文件数量,和需要删除的大小

接下去有 n 行,每一行都是一个文件绝对路径(路径长度小于 100),和这个文件的大小(小于 1000)

输出描述:

输出所有删除方案中,删除操作次数最小是多少。如果找不到恰好删除的大小为 m 的方案,则打印 -1

输入样例:

6 10
/data/movie/a.mp4 5
/data/movie/b.mp4 3
/data/movie/c.mp4 2
/data/movie/d.mp4 4
/data/picture/a.jpg 4
/data/picture/b.jpg 1

输出样例:

2

解题报告

动态规划,把所有文件排序,设第 i 个文件名和大小分别为 x, y

设 f[i][j] 为删除前 i 个文件,总大小为 j 时的最少操作数,初始时 f[i][j] = oo,f[0][0] = 0

则 f[i][j] = min{f[i - 1][j], f[i - 1][j - y] + 1},其中 1 <= j <= m

维护上一次的文件夹名称及编号 k 和文件夹总大小 yy,当 x 的文件夹名称与上一次不同时,则 f[i][j] = min{f[i - 1][j], f[i - 1][j - y] + 1, f[k][j - yy] + 1}

若 f[n][m] > oo 则答案为 -1 否则为 f[n][m]

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, n, m, vector):
        if m == 0:
            return 0
        if n == 0:
            return -1
        oo = n * 2
        f = [[oo for j in range(m + 1)] for i in range(n + 1)]
        vector = sorted(vector)
        zz = vector[0][0].split('/')[2]
        s = 0
        j = 0
        f[0][0] = 0
        for k, (x, y) in enumerate(vector):
            y = int(y)
            for i in range(m):
                f[k + 1][i] = min(f[k + 1][i], f[k][i])
                if f[k][i] < oo and i + y <= m:
                    f[k + 1][i + y] = min(f[k + 1][i + y], f[k][i] + 1)
            z = x.split('/')[2]
            if z != zz:
                for i in range(m):
                    if f[j][i] < oo and i + s <= m:
                        f[k + 1][i + s] = min(f[k + 1][i + s], f[j][i] + 1)
                s = y
                zz = z
                j = k
            else:
                s += y
        for i in range(m):
            if f[j][i] < oo and i + s <= m:
                f[k + 1][i + s] = min(f[k + 1][i + s], f[j][i] + 1)
        ans = min([f[k][m] for k in range(n + 1)])
        if ans < oo:
            return ans
        return -1


if __name__ == "__main__":
    arr_temp = [int(item) for item in input().strip().split()]
    n = int(arr_temp[0])
    m = int(arr_temp[1])
    vector = []
    for i in range(n):
        vector.append([item for item in input().strip().split()])
    sol = Solution()
    result = sol.solution(n, m, vector)
    print(result)

4. 交际圈

题目

小明参加了个大型聚会。聚会上有n个人参加,我们将他们编号为1…n,有些人已经互相认识了,有些人还不认识。聚会开始后,假设A跟B认识,A会给所有他认识的人介绍B,原先跟A认识,但不认识B的人,都会在此时,跟B互相认识。当所有人都把自己认识的人介绍一遍后,此时n个人就会形成k个交际圈,同一个交际圈中,两两互相认识,不同的交际圈之间,互相不认识
问题:当所有人都把自己认识的人介绍一遍后,形成了多少个交际圈

输入描述:

第1行包含两个数字n(n <= 100000), m(m <= 100000),n表示参加聚会的人数,m表示聚会前,有多少对人已经互相认识了
第2行到第m+1行,每一行包含两个数字,a和b(a != b, 1 <= a, b <= n),代表的是聚会前,a和b已经互相认识

输出描述:

输出一个数字,表示形成的交际圈的个数

输入样例:

3 3
1 2
1 3
2 3

输出样例:

1

解题报告

图论。用并查集统计有多少个连通块即可

class Solution:
    def __init__(self) -> None:
        pass

    def getf(self, x):
        if self.f[x] != x:
            self.f[x] = self.getf(self.f[x])
        return self.f[x]

    def solution(self, n, m, vector):
        self.f = [i for i in range(n + 1)]
        v = set()
        for x, y in vector:
            x = self.getf(self.f[x])
            y = self.getf(self.f[y])
            self.f[x] = y
        for i in range(1, n + 1):
            self.f[i] = self.getf(i)
        return len(set(self.f[1:]))


if __name__ == "__main__":
    arr_temp = [int(item) for item in input().strip().split()]
    n = int(arr_temp[0])
    m = int(arr_temp[1])
    vector = []
    for i in range(m):
        vector.append([int(item) for item in input().strip().split()])
    sol = Solution()
    result = sol.solution(n, m, vector)
    print(result)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[解题报告] CSDN竞赛第23期 的相关文章

  • freertos- 重要管理数据结构-列表List及其操作API (笔记)

    1 xff0c 源码中的位置 list h xff0c list c 2 xff0c 列表和列表项结构 列表项分为2种 xff1a struct xLIST ITEM listFIRST LIST ITEM INTEGRITY CHECK
  • 技术分享 | Javaer 如何做单元测试?

    前言 xff1a 本文适用于 javaer xff0c 其他开发者或许可以借鉴 写本文的主旨有两个 xff0c 一是简单的给大家介绍下单元测试 xff0c 二是通过一个简单的示例来介绍一些单元测试的技巧 xff0c 希望以此来降低大家写单元
  • 扩展卡尔曼滤波【转】

    1 重点看 SLAM中的EKF xff0c UKF xff0c PF原理简介 半闲居士 博客园 2 机器人重点看 定位 xff08 一 xff09 xff1a 扩展卡尔曼滤波 windSeS的博客 3 重点实例 扩展卡尔曼滤波 xff08
  • AGV - Background(1)- Company

    Company 米克力美 DZ 80无轨导航AGV小车采用windows10智能交互系统 xff0c xff08 米克力美工业AGV小车机器人采用安卓交互系统 xff09 可自动编程和程序化 xff0c 实现自主学习 使用人员无需培训即可轻
  • 无线路由器CPU浅析 MT7621A、 BCM47189 到底谁强?

    转自 xff1a http bbs 360 cn thread 14459037 1 1 html 在第一讲中 xff0c 已经粗略介绍过了目前路由芯片的四大厂 xff1a Broadcom xff08 博通 xff09 Qualcomm
  • STM32F4_串口通信详解

    目录 1 串口相关介绍及使用 1 1 串口设置的一般步骤 xff1a 1 1 1 串口时钟和GPIO时钟使能 1 1 2 设置引脚复用器映射 1 1 3 GPIO端口模式设置 1 1 4 串口参数初始化 1 1 5 开启中断并且初始化NVI
  • 嵌入式Linux设备驱动开发笔记(二)

    一 内核的时间 xff08 1 xff09 Tick xff08 滴答 xff09 内核采用了一个新的时间单位来进行计时 该时间单位称为tick 滴答 xff0c 一个tick对应硬件定时器两次中断之间的时间间隔 当前内核每秒钟硬件定时器会
  • Docker实现原理/容器原理(LXC,Cgroups,Docker)

    Docker实现原理 容器原理 Docker实现原理 容器原理什么是容器 Container 容器传统架构问题容器是什么容器如何实现 CgroupsCgroups是什么Cgroups解决什么问题Cgroups如何工作Cgroups层级结构
  • ros 编译 Python 文件

    参考自 xff1a http wiki ros org rospy tutorials Tutorials Makefile 系统 xff1a Ubuntu14 04 ros indigo py并不是可编译的脚本文件 xff0c 但是为了适
  • [Emuelec]在gamelist.xml中,为中文游戏名生成拼音字母

    1 通过python脚本将汉字拼音首字母查询出来 usr bin python3 coding UTF 8 filename transPinying py 功能 xff1a 获取传入中文的每个汉字的拼音首字母 pydic 61 34 吖a
  • 51单片机-宏晶STC程序调试、烧录、硬仿真

    内容包括STC单片机内部硬件介绍 xff08 寄存器 xff09 与程序的调试 硬仿真 xff0c STC15F硬仿真及其错误处理 xff0c MCS 51仿真介绍 xff0c 全自动下载介绍等 紫色文字是超链接 xff0c 点击自动跳转至
  • STM32单片机-汇编指令2

    目录 xff1a 11 STMFD和LDMFD指令 1 xff09 STMFD SP R0 R7 xff0c LR 2 xff09 LDMFD SP R0 R7 xff0c LR 99 伪指令 1 xff09 PROC伪指令 2 xff09
  • 多个switch case如何优化

    这段时间一直在整改代码圈复杂度 xff0c 我们的要求是每个函数方法圈复杂度不得大于5 xff0c 以下是整改的部分截图 希望对整改代码的你有所提示或帮助 xff0c 如果有更好的整改方法 xff0c 还望您不吝赐教哦 xff01
  • OPENCV检测矩形并计算其中心

    include 34 cv h 34 include 34 highgui h 34 include lt stdio h gt include lt math h gt include lt string h gt pragma comm
  • Jetson Xavier NX/AGX快速安装Intel Realsense SDK并使用D455

    Jetson Xavier NX AGX快速安装Intel Realsense SDK并使用D455 环境搭建及测试 1 安装脚本下载 xff1a github链接 xff1a https github com jetsonhacks in
  • AirSim无人机键盘控制

    AirSim仿真中实现多键盘按键控制 前言本文实现效果一 环境依赖二 多按键检测1 Pygame中的常用的键盘鼠标事件2 利用Pygame实现的多按键检测 AirSim中键盘控制实现下期预告 前言 有时候为了方便在AirSim调试无人机 x
  • 使用多电脑进行AirSim联合仿真

    文章目录 前言一 什么时候适合用两台电脑进行仿真 xff1f 二 怎么使用多电脑联合仿真 局域网内 1 获取UE4渲染端的IP地址2 修改程序接口 前言 随着仿真无人机数量的增加 xff0c 单台电脑越来越难以做到实时渲染 xff0c 这时
  • H.265编码原理入门

    视频编码的目的是为了压缩原始视频 xff0c 压缩的主要思路是从空间 时间 编码 视觉等几个主要角度去除冗余信息 由于 H 264 出色的数据压缩比率和视频质量 xff0c 成为当前市场上最为流行的编解码标准 而 H 265 是在 H 26
  • Go语言 GMP面试题(GMP调度示例)

    GMP面试题 第一段第二段 第一段 span class token keyword package span main span class token keyword import span span class token strin
  • 卡尔曼滤波里观测值凭什么用观测方程来表示?

    观测方程Z k 61 H X k 43 V k 为什么是由状态值和误差决定的 xff1f 不应该是由传感器输进去的吗 为啥只赋了一个初值 xff0c 就不再输入了 xff1f 在师兄解释下 xff0c 我终于明白了 因为这是仿真 xff01

随机推荐

  • Linux 内核的面向对象设计思想

    使用C语言实现面向对象设计的方法 Linux内核用C语言实现了面向对象的设计思想 即使用了三方面的特性 xff1a 封装 继承 多态 使用结构体实现了对对象的封装 xff1b 某一结构体成员中含有其他结构体的实例 xff0c 实现了一个结构
  • Win11安装OBS Studio的详细步骤图文教程

    Win11安装OBS Studio的详细步骤图文教程分享 一些用户为了进行更方便的视频直播录制功能 xff0c 需要在电脑上安装OBS Studio 但是自己对这款软件比较陌生 xff0c 而且因为它是英文的 xff0c 不知道怎么安装 接
  • Win11系统怎么安装到虚拟机的方法分享

    Win11系统怎么安装到虚拟机的方法分享 有的用户想要在自己的虚拟机里面去安装Win11系统来进行使用 这样就可以在虚拟机里面去测试系统了 xff0c 系统有一些问题也可以不用担心 那么怎么在虚拟机里面去安装Win11系统呢 xff1f 接
  • 上传文件超过限制,造成长时间无响应的解决方案

    在上传大文件 xff0c 造成长时间没有响应的情况的解决方案 xff1a 上传大文件时 xff0c 因为http协议的响应问题 xff0c 造成长时间不能向客户端发送响应请求头 解决方案 xff1a 1 向服务器发送上传大文件的reques
  • checkbox的jsTree的一个调用

    lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 01 Transitional EN 34 gt lt html gt lt head gt lt meta http equiv 61 34 Content
  • 灵活使用递归算法,生成Excel文件中的复合表头

    最近 xff0c 在开发中 xff0c 需要导出数据到excel文件 xff0c 文件的表头的格式是不一致的 有复合表头 xff0c 也有单表头 xff0c 那么如何灵活地生成excel文件中的复合表头 首先有一个JSON字符串格式的字段描
  • 在 ibm http server 和 websphere 之间配置 ssl

    在WebSphere的环境中 xff0c 配置SSL xff0c 有一些细节需要注意 xff1a 1 最好是先安装 ibm http server7 32bit xff0c websphere7 再安装插件 2 http server 需要
  • Ext4使用总结(二)简单的hbox布局

    布局的合理利用 xff1a 如图 xff1a xtype 39 container 39 margins 39 5 0 0 0 39 layout align 39 stretch 39 type 39 hbox 39
  • 凤凰涅槃-在2016年的我

    2016年已经过去 xff0c 在过去的一年 xff0c 有许多的收获 xff0c 也有许多的不足 xff0c 过去的2016年 xff0c 我想到的一个词语来概括2016 xff0c 就是 34 凤凰涅槃 34 凤凰涅槃 xff1a 凤凰
  • 图床个人使用

    在这里插入图片描述
  • 软件开发者的精力管理(一)

    精力管理对于软件开发者来讲是非常重要的 不希望自己被长周期的项目拖垮 xff0c 不希望被连续的加班所累 我个人认为泛义的时间管理是涉及到多个方面的 而心理学 精力管理则是非常重要的 作为一名从事了多年软件开发的从业者 xff0c 我的一个
  • 如何高效能地学习和使用"工具"?

    在软件开发中 xff0c 应该注意工具的合理使用 xff0c 使得自己变得高效起来 1 工具也是产品 xff0c 有许多的工具是产品化的 既然是产品 xff0c 就很多的服务 xff0c 例如帮助文档 xff0c 论坛 xff0c 咨询人员
  • Ext4使用总结(十二) 采用 CellEditing 方式的Grid,如何取得修改的单元格数据值

    使用cellediting方式编辑数据的grid在保存数据时 xff0c 需要进行数据的处理 xff0c 所以数据处理的方式需要特别注意 cellEditing 插件的事件 listeners edit function editor e
  • 树莓派——开机指南

    1 准备 硬件准备 树莓派一块 SD卡 xff08 小卡 xff09 读卡器 树莓派电源或安卓手机电源 xff08 功率10w以上 xff0c 不然会导致电压不足会影响其性能 xff09 一台电脑 xff08 可以没有显示屏和鼠标键盘 xf
  • cmakelist.txt编写总结

    简述 前期进行autoware auto中泊车代码移植 xff0c 考虑到auto基于ros2编写 xff0c 而代码使用环境为ros1 xff0c 需要进行cmakelist的重写 xff1a 难点为ros2编译指令向ros1迁移 xff
  • [解题报告] CSDN竞赛第15期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 29 1 求并集 题目 由小到大输出两个单向有序链表的并集 如链表 A 1 gt 2 gt 5 gt 7 链表 B 3 gt 5 gt
  • [解题报告] CSDN竞赛第17期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 31 1 判断胜负 题目 已知两个字符串A B 连续进行读入n次 每次读入的字符串都为A B 输出读入次数最多的字符串 解题报告 模拟
  • [解题报告] CSDN竞赛第18期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 32 1 单链表排序 题目 单链表的节点定义如下 xff08 C 43 43 xff09 xff1a class Node publi
  • [解题报告] CSDN竞赛第22期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 36 1 c 43 43 难题 大数加法 题目 大数一直是一个c语言的一个难题 现在我们需要你手动模拟出大数加法过程 请你给出两个大整
  • [解题报告] CSDN竞赛第23期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 37 1 排查网络故障 题目 A地跟B地的网络中间有n个节点 xff08 不包括A地和B地 xff09 xff0c 相邻的两个节点是通