[CF复盘] Codeforces Round 863 (Div. 3) 20230404

@[TOC]([CF复盘] Codeforces Round 863 (Div. 3) 20230404 )

一、本周周赛总结

  • 做到E,但DE都TLE,很难受。

  • A 贪心。

  • B 坐标运算。

  • C 贪心构造。

  • D 分治DFS。

  • E 九进制模拟。

在这里插入图片描述

二、 A. Insert Digit

链接: A. Insert Digit

1. 题目描述

在这里插入图片描述

2. 思路分析

贪心,从左找到第一个小于d的数字,插到它前边。

3. 代码实现

# Problem: A. Insert Digit
# Contest: Codeforces - Codeforces Round 863 (Div. 3)
# URL: https://codeforces.com/contest/1811/problem/A
# Memory Limit: 256 MB
# Time Limit: 2000 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 = """https://codeforces.com/contest/1811/problem/A
输入t(<=1e4)表示t组数据,每组数据:
输入数字n<=2e5和d(0<=d<=9),然后输入一个n位的数字x。
你可以把d插入到x的任意位置,包括首尾。使得到的数尽可能大。
"""
"""贪心,从左找到第一个小于d的数字,插到它前边"""


#       ms
def solve():
    n, d = RI()
    a, = RS()
    a = list(a)
    for i, c in enumerate(a):
        if d > int(c):
            a.insert(i, str(d))
            break
    else:
        a.append(str(d))
    print(*a, sep='')


if __name__ == '__main__':
    t, = RI()
    for _ in range(t):
        solve()

三、B. Conveyor Belts

链接: B. Conveyor Belts

1. 题目描述

在这里插入图片描述

2. 思路分析

其实就是计算两个传送带的距离,设计一下传送带编号即可:越靠近外边编号越小,那么尝试x到上下边界最小值和y到上下边界最小值就是传送带编号

3. 代码实现

PROBLEM = """https://codeforces.com/contest/1811/problem/B
输入t(<=2e5)表示t组数据,每组数据:
输入n(偶数且<=1e9),x1,x2,y1,y2 (均<=n)。
其中n表示一个边长n的正放心栅格,栅格是由n//2个旋转运行的传送带组成。
你可以花费1点能量跳到相邻传送带,问从x1y1到x2y2最少花费几能量。
"""
"""其实就是计算两个传送带的距离,设计一下传送带编号即可:越靠近外边编号越小,那么尝试x到上下边界最小值和y到上下边界最小值就是传送带编号"""


#       ms
def solve():
    n, x1, y1, x2, y2 = RI()
    d1 = min(x1, n - x1 + 1, y1, n - y1 + 1)
    d2 = min(x2, n - x2 + 1, y2, n - y2 + 1)
    print(abs(d1 - d2))


if __name__ == '__main__':
    t, = RI()
    for _ in range(t):
        solve()

四、C. Restore the Array

链接: C. Restore the Array

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 最左边的位置显然是最不受影响的,让a[0]=b[0],那么a[1]就可以是0~b[0]之间任意数,我们希望它空出来不要影响后一个数b[1],因此填0最佳。
  • 对于b[i]如果前边的a[i]已经填了一个b[i]则他可以不填,取前边的数;如果前边没填数据,且b[i]比前边那个数小,则可以填到a[i]上;否则为了不影响前边只能填到后边的位置。

3. 代码实现

PROBLEM = """https://codeforces.com/contest/1811/problem/C
输入t(<=1e4)表示t组数据,每组数据:
输入n(<=2e5)和长为n-1的数组b(bi<=1e9)。
构造一个长为n的数组a,使对于所有i<n-1,max(a[i],a[i+1])=b[i]
你可以输出任意一个合法答案。
"""
"""贪心构造
最左边的位置显然是最不受影响的,让a[0]=b[0],那么a[1]就可以是0~b[0]之间任意数,我们希望它空出来不要影响后一个数b[1],因此填0最佳。
对于b[i]如果前边的a[i]已经填了一个b[i]则他可以不填,取前边的数;如果前边没填数据,且b[i]比前边那个数小,则可以填到a[i]上;否则为了不影响前边只能填到后边的位置。
"""


#       ms
def solve():
    n, = RI()
    b = RILST()
    a = [0] * n
    a[0] = b[0]
    for i in range(1, n - 1):
        if b[i] <= b[i - 1] and a[i] == 0:
            a[i] = b[i]
        elif a[i] == b[i]:
            pass
        else:
            a[i + 1] = b[i]
    print(*a)
    # c = []
    # for i in range(n-1):
    #     c.append(max(a[i],a[i+1]))
    # print(b == c)


if __name__ == '__main__':
    t, = RI()
    for _ in range(t):
        solve()

五、D. Umka and a Long Flight

链接: D. Umka and a Long Flight

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 直接dfs分治,注意加记忆化过不了。
  • 显然n=1是能过的,看case1。
  • 剩余情况画一下图,尝试把矩形的长边按照宽的位置切一刀,那么可以选左边或者右边切出来;这样会变成一个正方形和一个更小的n-1号fib矩形;
  • 目标位置必须在矩形上才可以。否则返回false。
  • 注意t<=2e5,因此组内需要保证复杂度<=500,加记忆可能导致内存问题,巨卡。不加记忆化由于n一直-1,因此最多是44。

3. 代码实现

PROBLEM = """https://codeforces.com/contest/1811/problem/D
定义斐波那契数列为fib=[1,1,2,3...],定义第n个fib矩形的高是fib[n],宽fib[n+1]的长方形。
输入t(<=2e5)表示t组数据,每组数据:
输入n(<=44), x, y (为第n个fib矩形内的合法坐标点),
你需要判断能否把矩形切分成恰好n+1个正方形方格,且同时满足3个条件:
1. (x,y)位置必须单独切分成1X1的小方格。
2. 至少有一对方块的边长相同。
3. 每个方格的边长都是斐波那契数。
"""
"""
直接dfs分治,注意加记忆化过不了。
显然n=1是能过的,看case1。
剩余情况画一下图,尝试把矩形的长边按照宽的位置切一刀,那么可以选左边或者右边切出来;这样会变成一个正方形和一个更小的n-1号fib矩形;
目标位置必须在矩形上才可以。否则返回false。
注意t<=2e5,因此组内需要保证复杂度<=500,加记忆可能导致内存问题,巨卡。不加记忆化由于n一直-1,因此最多是44。
当然可以写while写法,直接迭代n,x,y。
"""

fib = [1, 1]
for _ in range(44):
    fib.append(fib[-1] + fib[-2])


#     1309  ms
def solve():
    n, x, y = RI()

    # @lru_cache
    def f(n, x, y):
        if n == 1:
            return True
        h, w = fib[n], fib[n + 1]

        x = min(x, h - x + 1)
        if y > h:
            return f(n - 1, y - h, x)
        if y <= w - h:
            return f(n - 1, y, x)
        return False

    ans = f(n, x, y)
    # f.cache_clear()
    if ans:
        return 'YES'
    else:
        return 'NO'


if __name__ == '__main__':

    t, = RI()
    ans = []
    for _ in range(t):
        ans.append(solve())
        # f.cache_clear()
    print(*ans, sep='\n')     

六、E. Living Sequence

链接: E. Living Sequence

1. 题目描述

在这里插入图片描述

2. 思路分析

本来我写了个数位DP+二分。但是过不了,我以为和D是一样的卡记忆化,其实不是。
  • 由于t=1e4,数位dp状态数是位数1422,转移要10,再加一个log可能是50,组内复杂度就是2e5,肯定是过不了的。

  • 考虑9进制:把所有数字都去掉4的话,那么其实每位只有9个选项,而且大小顺序是不变的。从1开始数的话,找出这个9进制的k即可,然后把每一位换成对应的数字。
  • 直接用连除拆解每一位。

3. 代码实现

PROBLEM = """https://codeforces.com/contest/1811/problem/E
输入t(t<=1e4)代表t组数据,每组数据:
输入k。
从1开始向后的自然数中,去除所有带4的数字,问第k个数字是几(注意k从1开始计数)
"""
"""本来我写了个数位DP+二分。但是过不了,我以为和D是一样的卡记忆化,其实不是。
由于t=1e4,数位dp状态数是位数14*2*2,转移要10,再加一个log可能是50,组内复杂度就是2e5,肯定是过不了的。
---
考虑9进制:把所有数字都去掉4的话,那么其实每位只有9个选项,而且大小顺序是不变的。从1开始数的话,找出这个9进制的k即可,然后把每一位换成对应的数字。
直接用连除拆解每一位。
"""


def my_bisect_left(a, x, lo=None, hi=None, key=None):
    """
    由于3.10才能用key参数,因此自己实现一个。
    :param a: 需要二分的数据
    :param x: 查找的值
    :param lo: 左边界
    :param hi: 右边界(闭区间)
    :param key: 数组a中的值会依次执行key方法,
    :return: 第一个大于等于x的下标位置
    """
    if not lo:
        lo = 0
    if not hi:
        hi = len(a) - 1
    else:
        hi = min(hi, len(a) - 1)
    size = hi - lo + 1

    if not key:
        key = lambda _x: _x
    while size:
        half = size >> 1
        mid = lo + half
        if key(a[mid]) < x:
            lo = mid + 1
            size = size - half - 1
        else:
            size = half
    return lo


#  tle     ms
def solve1():
    # n, = RI()
    k, = RI()

    def ok(x):
        s = str(x)
        n = len(s)

        # mp = {}
        @lru_cache
        def f(i, is_limit, is_num):
            if i == n:
                return int(is_num)
            # if (i, is_limit, is_num) in mp:
            #     return mp[i, is_limit, is_num]
            ans = 0
            if not is_num:
                ans += f(i + 1, False, False)
            up = int(s[i]) if is_limit else 9
            down = 0 if is_num else 1
            for j in range(down, up + 1):
                if j != 4:
                    ans += f(i + 1, is_limit and j == up, True)
            # mp[i, is_limit, is_num] = ans
            return ans

        ans = f(0, True, False)
        # f.cache_clear()
        return ans

    print(my_bisect_left(range(10 ** 15), k, key=ok))


#  9进制  140   ms
def solve():
    # n, = RI()
    k, = RI()
    s = '012356789'
    ans = []
    while k:
        ans.append(s[k % 9])
        k //= 9

    print(*ans[::-1], sep='')


if __name__ == '__main__':
    t, = RI()
    for _ in range(t):
        solve() 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

skimage.filters.apply_hysteresis_threshold详解

本文内容均参考scipy1.9.1scipy1.9.1scipy1.9.1版本的源码&#xff0c;若有任何不当欢迎指出 我们截取官方注释如下&#xff1a; def apply_hysteresis_threshold(image, low, high):"""Apply hysteresis thresholding to image.This algorithm finds regions …

RabbitMQ中TTL

目录一、TTL1.控制后台演示消息过期2.代码实现2.1 队列统一过期2.2 消息过期一、TTL TTL 全称 Time To Live&#xff08;存活时间/过期时间&#xff09;。 当消息到达存活时间后&#xff0c;还没有被消费&#xff0c;会被自动清除。 RabbitMQ可以对消息设置过期时间&#xff0…

QT与Halcon联编应用开发-设置软件图标Icon

VS+Qt应用开发-设置软件图标 设置软件exe图标设置运行时标题栏和任务栏图标默认的Qt是没有图标的,如下图所示,可以在Qt应用程序发布时和应用程序运行时给应用程序加上图标。 任务栏图标: 软件左上角图标 可执行程序图标

原来count(*)是接口性能差的真凶

以下文章来源于苏三说技术 &#xff0c;作者苏三呀 一.前言 最近我在公司优化过几个慢查询接口的性能&#xff0c;总结了一些心得体会拿出来跟大家一起分享一下&#xff0c;希望对你会有所帮助。 我们使用的数据库是Mysql8&#xff0c;使用的存储引擎是Innodb。这次优化除了优…

通过Chrome打开IE浏览器并跳转到指定页面并传递参数

通过Chrome打开IE浏览器并跳转到指定页面并传递参数 方式一&#xff1a;通过浏览器打开ie浏览器&#xff08;可以换做其他应用&#xff09;&#xff0c;跳转到指定页面&#xff08;方式一只支持单个参数&#xff09; 1、新建alert.reg Windows Registry Editor Version 5.00…

IOC/DI的注解开发

IOC/DI注解开发3&#xff0c;IOC/DI注解开发3.1 环境准备3.2 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等3.2 纯注解开发模式3.2.1 思路分析3.2.…

https和ssl网关在各安全层面的应用场景及测评要点

1、https和https实现 SSL/TLS协议是独立的概念&#xff08;这里的重点是https和ssl v**&#xff0c;关于ssl/tls协议就不展开说了&#xff09;&#xff0c;可以实现对基于TCP/UDP应用的安全保护&#xff0c;如https和sftp等。 https是其中应用非常广泛的一种&#xff0c;即Hype…

RocketMQ 5.1 NameServer 启动流程

文章目录1 解析命令行参数和配置文件2 创建并启动 NamesrvController2.1 创建 NamesrvController 对象2.2 启动 NamesrvController 对象第一步&#xff1a;初始化 controller第二步&#xff1a;注册 JVM 钩子第二步&#xff1a;启动 controllerRocketMQ是一个分布式消息中间件&…

爬虫学习(网页解析)

目录 了解&#xff1a; 参考图 介绍 bs4库&#xff1a; 解析器&#xff1a; 解析方法 代码示例 lxml库&#xff1a; 解析器 解析方法 代码示例 了解&#xff1a; 参考图 (1) html解析器&#xff1a; (2) 解析方式&#xff1a; 介绍 ### 前言&#xff1a; 网页…

财政分权数据集:省级地级市财政分权度(1999-2021年)

财政分权是指中央政府和地方政府在财政收入和支出方面各自拥有一定的自主权&#xff0c;即政府财政权力在中央和地方之间进行分割和分配的一种制度安排。财政分权的实施可以促进地方政府的责任感和创造力&#xff0c;提高政府的效率和服务水平&#xff0c;同时也可以增强地方政…

蓝桥杯嵌入式第十三届(第二套客观题)

文章目录 前言一、题目1二、题目2三、题目3四、题目4五、题目5六、题目6七、题目7八、题目8九、题目9十、题目10总结前言 本篇文章继续讲解客观题。 一、题目1 这个其实属于送分题,了解嵌入式或者以后想要入行嵌入式的同学应该都对嵌入式特点有所了解。 A. 采用专用微控制…

KDZD-JP简易式机械碰撞试验台

一、产品制作标准 依据高压开关标准要求制作&#xff1a;GB7251-2013《低压成套开关设备和控制设备》、GB3906-2006 《3.6KV-40.5KV 交流金属封闭开关设备和控制设备》、GB/T 11022—2011《高压开关设备和控制设备标准的共用技术要求》、GB/T 1984—2014 《高压交流断路器》、…

全网最细的自定义类型详解(结构体,枚举,联合),友友们快来接收吧

各位csdn的友友们肯定都掌握了c语言中char&#xff0c;short, int, long, float, double的类型,这些都是我们c语言中的一些内置类型&#xff0c;其实c语言是可以允许我们创造一些类型的&#xff0c;今天阿博就带领友友们一起掌握这些新的自定义类型&#x1f60a;&#x1f60a;&…

[Java Web]Session | 一文详细介绍会话跟踪技术中的Session

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Java Web 目录Session1、介绍2、工作流程3、工作原理4、基本使用5、Session的钝化与活化5.1、提出问题5.2、&…

【C语言蓝桥杯每日一题】—— 递增序列

【C语言蓝桥杯每日一题】—— 递增序列&#x1f60e;前言&#x1f64c;递增序列&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &#x1f60a;作者…

软考中级-软件工程

1 软件过程1.1 能力成熟度模型&#xff08;CMM&#xff09;初始&#xff08;混乱&#xff09;->可重复&#xff08;建立基本、重复以往&#xff09;->已定义&#xff08;文档化、标准化&#xff09;->已管理&#xff08;制定产品质量标准&#xff09;->优化&#x…

HTML5 SSE

HTML5 服务器发送事件(Server-Sent Events) 服务器发送事件&#xff08;Server-sent Events&#xff09;是基于 WebSocket 协议的一种服务器向客户端发送事件和数据的单向通讯。 HTML5 服务器发送事件&#xff08;server-sent event&#xff09;允许网页获得来自服务器的更新。…

快速将PDF转换为图片:免费的在线PDF转换器

在现代数字时代&#xff0c;PDF是一种非常常见的文件格式。它们在学术界&#xff0c;商业领域和许多其他领域中被广泛使用。有时&#xff0c;您可能需要将PDF文件转换为图像格式&#xff0c;以便能够方便地与他人共享和使用。在这种情况下&#xff0c;您可以使用免费的在线PDF转…

PyCharm 配置sqlite3驱动

在PyCharm中可以查看sqlite3数据库&#xff0c;具体要如何做呢&#xff1f; 数据库入口 打开PyCharm&#xff0c; 在最右侧&#xff0c;有一个Database的表示&#xff0c;点击如下图所示。 如果没有找到这个选项&#xff0c; 点击View -> Tool Windows -> Database同…

chatgpt实际是怎样工作的?

文章翻译自&#xff1a; https://www.assemblyai.com/blog/how-chatgpt-actually-works/ ChatGPT 是 OpenAI 的最新语言模型&#xff0c;比其前身 GPT-3 有了重大改进。与许多大型语言模型类似&#xff0c;ChatGPT 能够为不同目的生成多种样式的文本&#xff0c;但具有更高的精…
最新文章