[acwing周赛复盘] 第 94 场周赛20230311

news2024/11/23 12:41:46

[acwing周赛复盘] 第 94 场周赛20230311

    • 一、本周周赛总结
    • 二、 4870. 装物品
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、4871. 最早时刻
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、4872. 最短路之和
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • 又是笨比的一周,只做出1题。
  • T1 数学
  • T2 单源最短路dijikstra
  • T3 多源最短路floyd
  • 在这里插入图片描述

二、 4870. 装物品

链接: 4870. 装物品

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 所有人都应该知道上取整公式:
  • ceil(a/b) = (a+b-1)//b

3. 代码实现

import sys
import bisect

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())
DEBUG = lambda *x: sys.stderr.write(f'{str(x)}\n')

#       ms
def solve():
    x, = RI()
    print((x+5-1)//5)


if __name__ == '__main__':
    solve()

三、4871. 最早时刻

链接: 4871. 最早时刻

1. 题目描述

在这里插入图片描述

2. 思路分析

脑子木了,一直在想二分怎么不对;而且还写错变量名。。
  • 是个比较显然的dijkstra,但是多了个限制条件,有的时间点不能出发。
  • 那么可以提前预处理出每个节点位置,所有不能走的时间点,它最早能走的时间。
    • 这里一个倒序dp即可。最后一个时间点能走的时间显然是b[-1]+1.
    • 向前遍历,如果b[i]后边的数不是b[i]+1,则它在b[i]+1能走;否则就是更后边最近的那个能走的时间点。
  • 那么转移的时候出发时间转换一下即可。

  • 注意dijkstra每个节点只会访问一次,要记得写if d>vis[d]:continue因此其实b可以不预处理,直接暴力。

3. 代码实现

# Problem: 最早时刻
# Contest: AcWing
# URL: https://www.acwing.com/problem/content/4874/
# Memory Limit: 256 MB
# Time Limit: 1000 ms

import sys
from heapq import *
from math import inf

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())
DEBUG = lambda *x: sys.stderr.write(f'{str(x)}\n')


#    4330   ms
def solve():
    n, m = RI()
    g = [[] for _ in range(n)]
    for _ in range(m):
        u, v, w = RI()
        u -= 1
        v -= 1
        g[u].append((v, w))
        g[v].append((u, w))
    gogo = []
    for _ in range(n):
        _, *b = RI()
        can = {}
        if b:
            go = b[-1] + 1
            can[b[-1]] = go
            for i in range(len(b) - 2, -1, -1):
                if b[i] + 1 != b[i + 1]:
                    go = b[i] + 1
                can[b[i]] = go
        gogo.append(can)

    vis = [inf] * n
    vis[0] = 0
    h = [(0, 0)]
    while h:
        d, u = heappop(h)
        if u == n - 1:
            return print(d)
        if d > vis[u]:continue  # 巨量优化记得写
        ban = gogo[u]
        go = ban.get(d, d)

        for v, w in g[u]:
            nd = go + w
            if vis[v] > nd:
                vis[v] = nd
                heappush(h, (nd, v))
    # if n - 1 in vis:
    #     return print(vis[n - 1])
    print(-1)


if __name__ == '__main__':
    solve()

四、4872. 最短路之和

链接: 4872. 最短路之和

1. 题目描述

在这里插入图片描述

2. 思路分析

傻了,想到了floyd,但没做出来。赛后写了2个代码。都应该掌握。
  • 显然这题是个倒序做的题,把x从后一直加到集合里计算即可。

  • 方法1,直观且短。把x作为k(去松弛别人的节点),去遍历松弛。
  • 由于在floyd里,k是最外层的节点,因此这么做完后,k的影响已经结束了,则可以更新当前答案。
  • 实现时,松弛的话是u,v都是全部节点;计算答案只计算已添加的节点。

  • 方法2,助于理解floyd。
  • 依然倒序把x作为k,但是分别计算三种最短路:k到所有已访问的u、所有u到k、所有已访问的u到v。
  • 这里注意计算顺序,由于u->v是已经计算完的最短路,所以必须用它们先去更新k相关的最短路,再返回来计算新的u->v。

3. 代码实现

# Problem: 最短路之和/*-/*-/*-/*-
# Contest: AcWing
# URL: https://www.acwing.com/problem/content/4875/
# Memory Limit: 256 MB
# Time Limit: 3000 ms

import sys

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())
DEBUG = lambda *x: sys.stderr.write(f'{str(x)}\n')

MOD = 10 ** 9 + 7
PROBLEM = """
"""


#     6995  ms
def solve():
    n, = RI()
    d = []
    for _ in range(n):
        d.append(RILST())
    xs = RILST()
    ans = []
    ps = []
    for x in xs[::-1]:
        k = x - 1
        # 注意 上两个循环可以合并(顺序随意),但这个循环必须在最后,否则会wa
        # 前提是所有其它点到k的最短路(即所有uk/kv)求出来,才可以用k来松弛uv的边。
        for u in range(n):
            for v in range(n):
                d[u][v] = min(d[u][v], d[u][k] + d[k][v])

        ps.append(k)
        a = 0
        for u in ps:
            for v in ps:
                a += d[u][v]
        ans.append(a)
    print(*(ans[::-1]))


#     10039   ms
def solve1():
    n, = RI()
    d = []
    for _ in range(n):
        d.append(RILST())
    xs = RILST()
    ans = []
    ps = []
    for x in xs[::-1]:
        k = x - 1
        a = 0

        # 尝试用所有v松弛uk,这里uv已经是最短路,所以可以松弛
        for u in ps:
            for v in ps:
                d[u][k] = min(d[u][k], d[u][v] + d[v][k])
            a += d[u][k]
        # 尝试用所有v松弛ku,这里uv已经是最短路,所以可以松弛
        for u in ps:
            for v in ps:
                d[k][u] = min(d[k][u], d[k][v] + d[v][u])
            a += d[k][u]

        # 注意 上两个循环可以合并(顺序随意),但这个循环必须在最后,否则会wa
        # 前提是所有其它点到k的最短路(即所有uk/kv)求出来,才可以用k来松弛uv的边。
        for u in ps:
            for v in ps:
                d[u][v] = min(d[u][v], d[u][k] + d[k][v])
                a += d[u][v]

        ps.append(k)
        ans.append(a)
    print(*(ans[::-1]))


if __name__ == '__main__':
    solve()

六、参考链接

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

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

相关文章

保姆级图文教程 - VirtualBox安装配置Kali Linux

文章目录下载Kali Linux虚拟机包安装Kali用户配置网络配置静态ipDHCP分配IP换deb源下载Kali Linux虚拟机包 官网地址:https://www.kali.org/get-kali/#kali-virtual-machines 我们选择virtualbox版的,就是最中间的那个。 安装Kali 将压缩包解压&…

计算机网络:传输层概述

传输层 只有主机才有的层次 传输层的功能: 1.传输层提供进程与进程之间的逻辑通信。 2.复用:应用层的所有进程可以都使用一同传输层协议。 3.分用:传输层从网络层收到数据后,交付给指明的应用进程。 4.传输层对收到的报文进行差错…

二十一、Django-restframework之序列化器补充

一、常用序列化器字段 序列化器字段处理基元值和内部数据类型之间的转换。它们还处理输入值的验证,以及从它们的父对象检索和设置值。 (1)核心参数 每个序列化器字段类构造函数至少接受这些参数。一些字段类还接受额外的,字段特…

STM8S系列基于IAR标准外设printf输出demo

STM8S系列基于IAR标准外设printf输出demo📌STM8S/A标准外设库(库版本V2.3.1)📍官网标准外设库:https://www.st.com/zh/embedded-software/stsw-stm8069.html ⛳注意事项 🚩在内存空间比较有限的情况下&am…

.vue 组件打包成 .js

.vue 组件打包成 .js *** 所有的内容 cli 官网都有 *** *** https://cli.vuejs.org/zh/guide/build-targets.html *** 所有的内容 cli 官网都有: https://cli.vuejs.org/zh/guide/build-targets.html 准备 几个 .vue 组件文件 import Main from ./components/Ma…

MySQL InnoDB存储引擎锁与事务实现原理解析(未完成)

InnoDB MySQL存储引擎是基于表的,也就是说每张表可以选择不同的存储引擎。 InnoDB存储引擎的表是索引组织的,也就是数据即索引。 存储引擎文件 InnoDB引擎会包含RedoLog重做日志文件和TableSpace表空间文件。 表空间文件 默认表空间文件&#xff08…

Win32 ListBox控件

Win32 ListBox控件 创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …

HashMap ConcurrentHashMap介绍

目录 HashMap 数据结构 重要成员变量 Jdk7-扩容死锁分析 单线程扩容 多线程扩容 Jdk8-扩容 ConcurrentHashMap 数据结构 并发安全控制 源码原理分析 重要成员变量 协助扩容helpTransfer 扩容transfer 总结 CopyOnWrite机制 源码原理 HashMap 数据结构 数组…

【题解】百度2020校招Web前端工程师笔试卷(第一批):单选题、多选题

题目来源 若有错误请指正! 单选 1 分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始,若某一计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节,若…

01.Java的安装

1.JDK&JREJDK : Java SE Development Kit--Java开发工具JRE : Java Runtime Environment--Java运行环境Java编程,需要安装JDK;如果仅仅是运行一款Java程序则只需要运行JREJava的安装包分为两类:一类是JRE--是一个独立的Java运行环境; 一类…

卷积神经网络中的padding理解

前言 在进行卷积神经网络中,经常用到padding,padding在卷积神经网络中起到什么样的作用呢,又是如何发挥作用的呢?本文就此谈下自己看法。 代码中的显示 model.add(Conv2D(filters 32,kernel_size [3,3],strides [1,1],padd…

基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

1. 7 Eureka注册中心 1.7.1 远程调用的问题 地址信息获取:服务消费者如何获取服务提供者的地址信息(不能每次都写死): URL:http://localhost:8081/user/"order.getUserId()多选一:如果有多个服务提供…

HBase存储结构、基本架构和shell操作

文章目录一、HBase简介1.1、HBase定义1.2、HBase的存储结构1.3、HBase基本架构二、HBase Shell操作2.1、基本操作2.2、namespace2.3、DDL2.4、DML一、HBase简介 1.1、HBase定义 HBase是一个开源的分布式NoSQL数据库,它是Apache Hadoop项目的一部分,使用…

代码随想录算法训练营 day56 | 动态规划 647. 回文子串 516.最长回文子序列

day56647 回文子串1.确定dp数组(dp table)以及下标的含义2.确定递推公式3,dp数组如何初始化4.确定遍历顺序5.举例推导dp数组516 最长回文子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化…

【H2实践】之 SpringBoot 整合

目标 本文紧接上篇【H2实践】之认识 H2,上篇简单介绍了 H2 及其使用,本文继上篇,探索 H2 与 SpringBoot 的整合。 主要实现目标: 1、SpringBoot 连接 H2 内存数据库,并对数据库进行管理。 2、访问 H2 Console 客户端…

Pytest 自动化测试框架

Pytest和Unittest测试框架的区别? 如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架&#x…

52癫痫发作预测的有效双自注意力残差网络

Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一,引起了众多研究者的广泛关注。癫痫发作预测,可以在许多方面大大提高患者的生活质量&#xff0…

springboot项目配置序列化,反序列化器

介绍本文介绍在项目中时间类型、枚举类型的序列化和反序列化自定义的处理类,也可以使用注解。建议枚举都实现一个统一的接口,方便处理。我这定义了一个Dict接口。枚举类型注解处理这种方式比较灵活,可以让枚举按照自己的方式序列化&#xff0…

三种通用方法——惠普电脑硬盘数据恢复

随着当今数字时代的到来,人们对于计算机硬盘上存储的数据越来越重视。然而,电脑硬盘也时常会发生数据丢失的情况,这时候就需要进行数据恢复。惠普电脑是市面上比较常见的品牌之一,因此本文将从惠普电脑硬盘数据恢复的角度出发&…

【你不知道的事】JavaScript 中用一种更先进的方式进行深拷贝:structuredClone

你是否知道,JavaScript中有一种原生的方法来做对象的深拷贝? 本文我们要介绍的是 structuredClone 函数,它是内置在 JavaScript 运行时中的: const calendarEvent {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve…