[acwing周赛复盘] 第 78 场周赛20221119

news2025/1/11 9:09:20

[acwing周赛复盘] 第 78 场周赛20221119

    • 一、本周周赛总结
    • 二、4719. 商品种类
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、4720. 字符串
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、4721. 排队
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • 这周蛮简单的。
  • T2 栈的应用。
  • T3 离线+大顶堆。
    在这里插入图片描述
    在这里插入图片描述

二、4719. 商品种类

链接: 4719. 商品种类

1. 题目描述

在这里插入图片描述

2. 思路分析

就是set去重

3. 代码实现

import sys
from collections import *
from contextlib import redirect_stdout
from itertools import *
from math import sqrt
from array import *
from functools import lru_cache
import heapq
import bisect
import random
import io, os
from bisect import *

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())

MOD = 10 ** 9 + 7


def main():
    n, = RI()
    s = set()
    for _ in range(n):
        p = tuple((RS()))
        s.add(p)

    print(len(s))


if __name__ == '__main__':
    # testcase 2个字段分别是input和output, 前后的回车空格无所谓,会前后strip
    test_cases = (
        (
            """
5
b y
m r
b y
m y
m g
""",
            """
4
"""
        ),
    )
    if os.path.exists('test.test'):
        total_result = 'ok!'
        for i, (in_data, result) in enumerate(test_cases):
            result = result.strip()
            with io.StringIO(in_data.strip()) as buf_in:
                RI = lambda: map(int, buf_in.readline().split())
                RS = lambda: buf_in.readline().strip().split()
                with io.StringIO() as buf_out, redirect_stdout(buf_out):
                    main()
                    output = buf_out.getvalue().strip()
                if output == result:
                    print(f'case{i}, result={result}, output={output}, ---ok!')
                else:
                    print(f'case{i}, result={result}, output={output}, ---WA!---WA!---WA!')
                    total_result = '---WA!---WA!---WA!'
        print('\n', total_result)
    else:
        main()

三、4720. 字符串

链接: 4720. 字符串

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 题目很贴心的不需要证明,那就按照一种方法直接删除就好了。
  • 很显然,题目中需要删除相邻位置;且删完了继续删合并后的相邻位置。
  • 明显是栈。

3. 代码实现

import sys
from collections import *
from contextlib import redirect_stdout
from itertools import *
from math import sqrt
from array import *
from functools import lru_cache
import heapq
import bisect
import random
import io, os
from bisect import *

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(x)
MOD = 10 ** 9 + 7


#    	 ms
def solve(s):
    st = []
    for c in s:
        if st and st[-1] == c:
            st.pop()
        else:
            st.append(c)

    print(''.join(st))


def main():
    s, = RS()
    DEBUG(s)
    solve(s)


if __name__ == '__main__':
    # testcase 2个字段分别是input和output
    test_cases = (
        (
            """
aabbcddddefggbbaa
""",
            """
cef
"""
        ),
        (
            """
abcddcef
""",
            """
abef
"""
        ),
        (
            """
abacabaabacabaa
""",
            """
a
"""
        ),
    )
    if os.path.exists('test.test'):
        total_result = 'ok!'
        for i, (in_data, result) in enumerate(test_cases):
            result = result.strip()
            with io.StringIO(in_data.strip()) as buf_in:
                RI = lambda: map(int, buf_in.readline().split())
                RS = lambda: buf_in.readline().strip().split()
                with io.StringIO() as buf_out, redirect_stdout(buf_out):
                    main()
                    output = buf_out.getvalue().strip()
                if output == result:
                    print(f'case{i}, result={result}, output={output}, ---ok!')
                else:
                    print(f'case{i}, result={result}, output={output}, ---WA!---WA!---WA!')
                    total_result = '---WA!---WA!---WA!'
        print('\n', total_result)
    else:
        main()

四、4721. 排队

链接: 4721. 排队

1. 题目描述

在这里插入图片描述

2. 思路分析

读了半天题,还以为要树状数组。

  • 然后发现离线+堆就可以搞定。
  • 把询问排序后,从小到大访问身高,并把访问的下标放到大顶堆中。
  • 显然对于当前访问的身高v,如果堆中存在元素,都是比它小的(这里暂时不考虑相等)。
  • 那么所有比它小的数,只要下标比它大就是一个不满意,而大顶堆保证了堆顶就是最右的下标,这个下标就是要求的下标。
  • 由于py中默认是小顶堆,这里我们取个符号。
  • 为了处理相等的情况,我多建立了一个队列,用来暂存身高,只有小于当前值了,才从队列弹出到堆。

3. 代码实现

import sys
from collections import *
from contextlib import redirect_stdout
from itertools import *
from math import sqrt
from array import *
from functools import lru_cache
import heapq
import bisect
import random
import io, os
from bisect import *

RI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())

MOD = 10 ** 9 + 7


#    	 ms
def solve(n, a):
    h = []
    a = sorted(zip(a, range(n)))
    t = deque()
    ans = [-1] * n
    for v,idx in a:
        while t and a[t[0]]!= v:
            heapq.heappush(h,-t.popleft())
        if h and -h[0]>idx:
            ans[idx] = -h[0]-idx-1
        t.append(idx)


    print(' '.join(map(str,ans)))


def main():
    n, = RI()
    a = RILST()
    solve(n, a)


if __name__ == '__main__':
    # testcase 2个字段分别是input和output
    test_cases = (
        (
            """
6
10 8 5 3 50 45
""",
            """
2 1 0 -1 0 -1
"""
        ),
        (
            """
7
10 4 6 3 2 8 15
""",
            """
4 2 1 0 -1 -1 -1 
"""
        ),
        (
            """
5
10 3 1 10 11
""",
            """
1 0 -1 -1 -1 
"""
        ),
    )
    if os.path.exists('test.test'):
        total_result = 'ok!'
        for i, (in_data, result) in enumerate(test_cases):
            result = result.strip()
            with io.StringIO(in_data.strip()) as buf_in:
                RI = lambda: map(int, buf_in.readline().split())
                RS = lambda: map(bytes.decode, buf_in.readline().strip().split())
                with io.StringIO() as buf_out, redirect_stdout(buf_out):
                    main()
                    output = buf_out.getvalue().strip()
                if output == result:
                    print(f'case{i}, result={result}, output={output}, ---ok!')
                else:
                    print(f'case{i}, result={result}, output={output}, ---WA!---WA!---WA!')
                    total_result = '---WA!---WA!---WA!'
        print('\n', total_result)
    else:
        main()

六、参考链接

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

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

相关文章

Kafka - Kafka应用场景|基础架构|Windows安装|命令行操作

文章目录1. 消息队列的应用场景2. 消息队列的两种模式3. Kafka 的基础架构4. Kafka 的安装5. Kafka 命令行操作1. 主题命令行操作2. 生产者命令行操作3. 消费者命令行操作1. 消息队列的应用场景 传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信。 ①…

Packet Tracer - 配置多区域 OSPFv3

地址分配表 设备 接口 IPv6 地址 OSPF 区域 RA G0/0 2001:DB8:1:A1::1/64 1 G0/1 2001:DB8:1:A2::1/64 1 S0/0/0 2001:DB8:1:AB::2/64 0 本地链路 FE80::A 不适用 RB G0/0 2001:DB8:1:B1::1/64 0 S0/0/0 2001:DB8:1:AB::1/64 0 S0/0/1 2001:DB8:1:BC:…

JVM运行时数据区域之PCRegister和虚拟机栈

运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据 区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启 动而一直存在,有些区域则是依赖用户线程的启动和结束而建立…

群晖NAS搭建WebDav服务,并内网穿透实现公网访问

WebDAV是基于HTTP协议的通信协议。适用于有些客户限制于其他协议,要求使用WebDAV协议进行数据传输的,下面是通过WebDAV协议来访问群晖NAS的设置教程。 1. 在群晖套件中心安装WebDav Server套件 点击打开套件中心,并搜索webdav,点…

性能测试-linux-top/vmstat/dstat命令,闭着眼睛也要背出来

目录 Linux系统差异化 Ubuntu安装应用 CentOS安装应用 Linux通用安装,tar.gz包 Linux系统帮助命令 help/man/info Linux系统中树状结构查看文件 Linux系统中文件类型区分与权限 Linux系统中都有哪些文件夹及其作用 Linux性能测试分析-TOP命令(重点) Linu…

NFV关键技术:DPDK技术栈在网络云中的最佳实践

本文篇幅有限,很难用短短几语就勾勒出DPDK的完整轮廓,概括来说,DPDK是一个技术栈,主要用于Intel架构的服务器领域,其主要目的就是提升x86标准服务器的转发性能。因此,本文只重点介绍DPDK平台部分技术在电信…

基于stm32单片机智能温控风扇控制系统Proteus仿真

资料编号:103 下面是相关功能视频演示: 103-基于stm32单片机智能温控风扇控制系统Proteus仿真(源码仿真全套资料)功能介绍:采用stm32单片机、ds18b20温度传感器采集温度,通过判断当前的温度值是否超过预设…

程序员怎样才能写出一篇好的博客或者技术文章?

文章目录来分享下鹅厂多位技术同学关于如何写好技术文章的经验。**1 为什么要写文章****1.1 对作者的好处****1.1.1 复盘学习成果,巩固知识理解****1.1.2 提升思考能力****1.1.3 传播技术知识,积累技术资产****1.1.4 提升表达与总结能力****1.1.5 打造个…

尚医通 (二十五) --------- 医院接口开发

目录一、医院系统模拟接口1. 服务部署2. 操作说明3. 上传接口与回调接口① 业务术语② 安全控制③ 业务接口④ 平台接口⑤ 医院接口二、集成 MongoDB三、添加医院基础类四、上传医院五、参数签名六、图片 Base64 编码七、查询医院接口一、医院系统模拟接口 1. 服务部署 ① 找…

刷题笔记之十二(快到碗里来+跳台阶+变态跳台阶+不用加减乘除做加法+三角形+猴子分桃+反转部分单向链表)

目录 1. 快到碗里来 2. 跳台阶 3. 变态跳台阶 4. ConcurrentHashMap使用lock关键字保证线程安全;Arrays.asList返回值是List接口对象 5. 字符串对象比较相等,使用equals比较内容;使用 比较的是地址 6. 编译命令: javac 源文件名称.java; 运行命令: java 主类名称 要传递的…

第七章第二节:B树和B+树

文章目录教程:1. B树1.1 B树的定义1.2 B树的高度1.3 B树的插入和 删除1.4 B树的删除1.5 总结:2. B树2.1 B树的查找2.2 B树与B树的对比2.3 总结教程: B树: https://www.bilibili.com/video/BV1b7411N798/?p72&share_sourceco…

深入理解MySQL数据库(Innodb存储引擎)

1.BTree 什么是B Tree 1)树中每个结点至多有M棵子树(即至多含有m-1个关键字) 2)若根节点不是终端结点,则至少有两颗子树 3)所有的叶子结点都出现在同一层次上,并且不带信息 什么是BTree …

【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程仿真工程源代码答辩论文答辩PPT) 文章目录【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程仿真工程源代码答辩论文答辩PPT)资料下载链接任务书设计说…

Redis集群(Cluster)

Redis集群(Cluster) 单台redis容量限制,如何进行扩容?继续加内存、加硬件么?单台redis并发写量太大有性能瓶颈,如何解决?redis3.0中提供了集群可以解决这些问题。 redis集群是对redis的水平扩容,即启动N个…

静态后台管理(9页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 |学生管理系统网页设计 | OA管理系统 | 后台管理模板 | 智能停车系统 | 等网站的设计与制作 | HTML期末大学生网页设计作业,Web大学生网页 H…

C++ Visual Studio 2022 中的改进、行为更改和错误修复

目录 Visual Studio 2022 版本 17.4 中的一致性改进 作用域的基础类型没有固定类型enum 定义中没有固定基础类型的枚举器类型enum Visual Studio 2022 版本 17.3 中的一致性改进 改进了指针之间的修饰符兼容性检查 Visual Studio 2022 版本 17.2 中的一致性改进 未终止的双向…

【分隔结构】定从分离

形式 先行词 其他定语 定语从句先行词 状语 定语从句作主语的先行词 谓语 定语从句 练习一 他们从一部分人来说,是受到了 1998 年才获得的 DNA 证据的启发,这份 DNA 证据,几乎肯定的证明了 Thomas Jefferson 和 他的奴隶 Sally Hemin…

力扣(LeetCode)16. 最接近的三数之和(C++)

双指针 快排使 numsnumsnums 正序。 设置三个指针 iii 指向 numsnumsnums 第一个数,从前往后枚举 nums[i]nums[i]nums[i] , lll 从 nums[i1]nums[i1]nums[i1] 往后,指向第二个数,rrr 从 nums.size()−1nums.size()-1nums.size()…

【博客539】使用openssl手动为k8s集群签发证书

使用openssl手动为k8s集群签发证书 创建ca私钥和ca证书 1、生成ca私钥:生成一个 2048 位的 ca.key 文件 openssl genrsa -out ca.key 2048 2、基于ca私钥,生成根(root)证书:在 ca.key 文件的基础上,生成 ca.crt 文件 openssl re…

[MQ] 交换机与队列的介绍

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…