【蓝桥杯PythonB组备赛】【Acwing周赛】第91场非常详细的过程思路分析理解分享Python解

news2024/12/25 15:00:42

好难哈哈哈我依旧只做对了第一题,第二题在比赛结束后才做出来……

不过没关系每天努力一点啦~

分享一下个人做的解析,供大家参考,一起努力哇!

目录

A    AcWing 4861. 构造数列

1.题目描述

2.思路分析

3.代码实现

B    AcWing 4862. 浇花

1.题目描述

2.思路分析

3.代码实现

C    AcWing 4863. 构造新矩阵

1.题目描述

2.思路分析

3.代码实现

4.算法知识点补充——二分模板


A    AcWing 4861. 构造数列

1.题目描述

2.思路分析

本题算法:贪心

主要思路:

  • 将n看成字符串,遍历其中每一个元素n[i] 
  • 若n[i]为0,不用管
  • 若n[i]不为0,就在n[i]后面添上对应的0,并放入构造数列l中

        如8009中的8,添上三个0变成8000,然后将8000放入构造数列l中

3.代码实现

T = int(input())
for _ in range(T):
    n = input()
    l = []
    for i in range(len(n)):
        if int(n[i]):
            l.append(n[i] + '0' * (len(n) - (i + 1)))
    print(len(l))
    print(' '.join(l))

B    AcWing 4862. 浇花

1.题目描述

2.思路分析

本题算法:暴力(枚举)

这题我一开始琢磨了半天没理解题目,不明白[ai,bi]什么意思。

后来终于意识到这是个区间:从第ai天到第bi天。

(我是傻子……)

过程思路:

  • 定义一个flag,默认为True(表示花没死)
  • 遍历a[i],b[i]的元素

flag永远为True(花一直没死)的条件:

1.前一个人和后一个人浇花连续不断  ==>  遍历a[i],b[i]时一直满足b[i] + 1 == a[i + 1]

举例:前一个人在第3天浇水了,后一个人在第4天必须浇水,

           如果没有在第4天浇水,第5天才浇水,花就死了。

           如果后一个人还是在第3天浇水,花也死了。

           所以必须满足3+1 == 4,花才不会死

2.第一个人和最后一个人必须分别在第1天和最后一天浇一次水 ==> a[1] == 1 and b[m] == n

所以我们要进行分类讨论: 

  • 水浇多了: 
    if b[i] == a[i + 1]:
        flag = False
        print(a[i + 1], a.count(a[i + 1]) + 1)
        break

如果前一个人在第3天浇水,后一个还在第3天浇水,

花就在第三天死了,因为浇了两次水。(flag = False)

如果之后的人还是在第3天浇水,那就浇了三次水,

所以我们数一下有几个在第3天浇水的人。

(至于为什么+1可以看一下下面的例子自己推敲一下哈)

'''
1 2
3 3 (i)
3 3 (i+1)
3 5
'''
  • 没浇水:

    elif a[i + 1] - b[i] > 1:
        flag = False
        print(b[i] + 1, 0)
        break

 如果前一个人在第3天浇水,后一个人在第5天浇水,(a[i + 1] - b[i] > 1)

那么第四天没人浇水,花就在第四天死了(b[i] + 1)

 一旦水浇多或者没浇水,花就死了,所以不需要再遍历了,直接break跳出循环

  • 水没浇多也没浇少,但是最后一天(或多天)没浇水:
    if flag:
        if b[m] == n:
            print("OK")
        else:
            print(b[m] + 1, 0)

    (第一天不用讨论了因为我们的a,b是从0开始的,在遍历时已经判断过了)

    如果最后一个人的浇水天数里没有n,说明最后一天(或多天)没浇水。

    比如10天假期,最后一个人在第8天浇了水之后就不浇了,那么后两天都没浇水,

    所以花在第9天(b[m] + 1)死了

ps:本题也可用差分

3.代码实现

n, m = map(int, input().split())
a, b = [0] * (m + 1), [0] * (m + 1)
for i in range(1, m + 1):
    a[i], b[i] = map(int, input().split())
flag = True
for i in range(m):
    if b[i] == a[i + 1]:
        flag = False
        print(a[i + 1], a.count(a[i + 1]) + 1)
        break
    elif a[i + 1] - b[i] > 1:
        flag = False
        print(b[i] + 1, 0)
        break
if flag:
    if b[m] == n:
        print("OK")
    else:
        print(b[m] + 1, 0)

C    AcWing 4863. 构造新矩阵

1.题目描述

2.思路分析

本题算法:二分

过程思路:

1. 构成新矩阵后,我们可以确定一个最大的整数 L,使得新矩阵中每一列都至少存在一个元素不小于 L。

 将上面这句话转换为:确定一个最大的整数 L,使得新矩阵中每一列的最大值>=L

2.本题数据量非常大,所以采取二分法来优化。

3.虽然说不超过n-1行,但是我们能多选绝对不少选,所以我们把n-1行都选上,也就是把>=L的值都圈上。(因为多选了没事,即使这一行数字比较小,我们也不需要管它,我们的目光是集中在大值上的;但是少选可能会漏掉一些关键的大值) 

ps:圈定义bool类型来表示

4.运用抽屉原理(也可以直接想)

当一行有2个元素都>=L(两个圈),那就选这行,因为这一行满足了两列

那么剩下的n-2列,不管我选哪一行,当前L都成立

即:

  • 1行盖2列
  • n-2行盖n-2列

(当然前提是:每一列都至少有一个元素>=L,否则必定不成立,此处可以另写一个判断)

3.代码实现

T = int(input())
for _ in range(T):
    kong = input()
    m, n = map(int, input().split())
    p, max_p = [], []
    for i in range(m):
        p.append(list(map(int, input().split())))
        max_p.append(max(p[i]))
    # 二分求最优解(L最大值)
    l = 1
    r = max(max_p)
    while l < r:
        L = (l + r + 1) // 2  # 要+1,不然死循环
        # 求当前L成不成立(该矩阵满不满足当前L)
        flag = [[False] * n for _ in range(m)]  # 默认矩阵元素都没有圈
        succeed = False  # 默认不成立
        # 将>=L的元素都圈上
        for i in range(m):
            for j in range(n):
                if p[i][j] >= L:
                    flag[i][j] = True
            # 如果这一行有两个及以上的元素被圈上了,当前L可能成立
            if flag[i].count(True) >= 2:
                succeed = True
        # 如果一列上没有一个圈,必不成立
        for i in range(n):
            lie = []  # 每一列
            for j in range(m):
                lie.append(flag[j][i])
            if lie.count(True) == 0:
                succeed = False
                break
        if succeed:
            l = L  # 成立的,所以不+1,万一此时就是最优解,加了个1就没了
        else:
            r = L - 1  # 当前L不成立
    print(r)

4.算法知识点补充——二分模板

模板一:

while l < r:
    mid = l + r >> 1  # (l + r) // 2
    if check(mid):  # check()判断mid是否成立
        r = mid
    else:
        l = mid + 1

模板二:

while l < r:
    mid = l + r + 1 >> 1
    if check(mid):
        l = mid
    else:
        r = mid - 1

细节处(很关键): 

只要是往左找答案,就用第一个模板,mid不用加一,r=mid,l加一;
只要是往右找答案,就用第二个模板,mid要加一,l=mid,r要减一;

这里的细节要着重理解记忆!!!

本题是往右找答案,mid+1是防止死循环,l不加1是防止错过正确答案

此处模板参考:二分查找 & 二分答案 万字详解,超多例题,带你学透二分。_小酒窝.的博客-CSDN博客_二分查找题目

感谢大佬~ 


最后一题分析参考y总的哈,大家也可以直接看y总的讲解。

如有帮助可以点赞收藏嘛~

如有不足或不解之处欢迎评论留言~

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

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

相关文章

从每刻到金蝶云星空通过接口配置打通数据

对接源平台:每刻刻报销是每刻科技旗下的产品&#xff0c;是国内领先的企业差旅及费用管理云平台&#xff0c;为事前差旅预订&#xff0c;事后报销的全流程费用管控服务。每刻报销融合人工智能云计算、移动互联网大数据等先进技术&#xff0c;融合财务共享和信用管理的理念&…

SPDK应用框架

SPDK应用框架SPDK应用框架1&#xff09;对CPU core和线程的管理2&#xff09;线程间的高效通信3&#xff09;I/O的处理模型及数据路径的无锁化机制SPDK用户态块设备层1.内核通用块层2.SPDK用户态通用块层SPDK架构解析3.通用块层的管理4.逻辑卷1&#xff09;内核LVM2&#xff09…

企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件

文章目录零、本讲学习目标一、课程引入二、打开项目【SpringDemo2021】三、利用组件注解符精简Spring配置文件1、创建net.hw.spring.lesson02包2、将lesson01子包的四个类拷贝到lesson02子包3、修改杀龙任务类 - SlayDragonQuest4、修改救美任务类 - RescueDamselQuest5、修改勇…

2022爱分析·事务型关系数据库市场厂商评估报告:万里数据库

目录 1. 研究范围定义 2. 事务型关系数据库市场定义 3. 厂商评估&#xff1a;万里数据库 4. 入选证书 1. 研究范围定义 在国内数字化转型以及信创建设持续推进的大背景下&#xff0c;众多厂商入局国内数据库市场&#xff0c;为企业提供了面向多种应用场景的数据库&am…

taobao.trade.memo.update( 修改交易备注 )

&#xffe5;开放平台基础API必须用户授权 需要商家或以上权限才可调用此接口&#xff0c;可重复调用本接口更新交易备注&#xff0c;本接口同时具有添加备注的功能 公共参数 点击获取 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey, secret); Trade…

2022年AI顶级论文 —生成模型之年(上)

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 过去十年来&#xff0c;人工智能技术在持续提高和飞速发展&#xff0c;并不断冲击着人类的认知。 2012年&#xff0c;在ImageNet图像识别挑战赛中&#xff0c;一种神经网络模型&#xff08;AlexNet&…

Java程序员进阶宝典,让你学习面试无忧!

心净则明,心诚则灵如果你想要一个月速成程序员&#xff0c;那么这篇文章不适合&#xff0c;如果你仅想要在IT圈“耍酷”&#xff0c;那你也不需要研读&#xff0c;如果你执着询问“退化”成为一名程序猿有啥捷径&#xff0c;那我只能告诉你&#xff0c;此路不通&#xff01;不可…

Flink-处理函数(ProcessFunction、KeyedProcessFunction、ProcessWindowFunctionHe侧输出流)

文章目录处理函数基本处理函数&#xff08;ProcessFunction&#xff09;功能和使用ProcessFunction 解析分类按键分区处理函数&#xff08;KeyedProcessFunction&#xff09;定时器&#xff08;Timer&#xff09;和定时服务&#xff08;TimerService&#xff09;KeyedProcessFu…

Vue的模板语法(双大括号表达式、插值、v-bind 指令、v-on、指令缩写)

模板语法前言知识点1、双大括号表达式2、插值2.1 文本2.2 原始 HTML2.3 特性2.4 javascript 表达式3、指令3.1 参数3.2 动态参数3.3 修饰符4、指令缩写4.1 v-bind4.2 v-on前言 相信模板语法大家多少都有所接触&#xff0c;例如百度模板引擎、ejs 等等。同样 Vue.js 也使用了基于…

基于springboot+vue物流项目

基于springbootvue物流项目 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#x…

内网渗透(四十二)之横向移动篇-WMIC远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

业内人士告诉你,买流量卡时一定要问的几个问题?

互联网时代&#xff0c;流量当然是至关重要&#xff0c;但是&#xff0c;在网上搜索流量卡时&#xff0c;广告可谓是铺天盖地&#xff0c;五花八门&#xff0c;所以&#xff0c;小编提醒大家&#xff0c;为了选择性价比较高的卡&#xff0c;在购买流量卡时一定要关注几个问题。…

深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)

专栏&#xff1a;神经网络复现目录 深度学习神经网络基础知识(二) 本文讲述神经网络基础知识&#xff0c;具体细节讲述前向传播&#xff0c;反向传播和计算图&#xff0c;同时讲解神经网络优化方法&#xff1a;权重衰减&#xff0c;Dropout等方法&#xff0c;最后进行Kaggle实…

一次简陋的页面登录练习

看着有点丑&#xff0c;果然我还是不太适合写前端哈<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&q…

2023年,Java岗大厂的架构师之路该怎样走?互联网寒冬能否有所好转?

大厂还值得去吗&#xff1f;程序员这个行业是不是不行了&#xff1f;我还有必要继续学习吗&#xff1f;答案显然是否定的&#xff0c;其实在行业里面很多年的程序员们都知道&#xff0c;大厂每年都会裁员&#xff0c;只不过是裁的数量多少而已&#xff0c;而大规模的裁员&#…

我的周刊(第079期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目ChatGPT 项目推荐基于 ChatGPT 相关接口衍生的项目&…

计算机网络学习笔记02

学习视频&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb/?p7&spm_id_frompageDriver&vd_source75dce036dc8244310435eaf03de4e330 一、计算机网络体系结构 1 常见的计算机网络体系结构 OSI体系结构和TCP/IP体系结构 TCP/IP体系结构的网络接口层并没有规…

【笔试强训】Day_02

目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、排序子序列 2、倒置字符串 一、选择题 1、 使用printf函数打印一个double类型的数据&#xff0c;要求&#xff1a;输出为10进制&#xff0c;输出左对齐30个字符&#xff0c;4位精度。…

@Valid与@Validated的区别

1.介绍 说明&#xff1a; 其实Valid 与 Validated都是做数据校验的&#xff0c;只不过注解位置与用法有点不同。 不同点&#xff1a; &#xff08;1&#xff09; Valid是使用Hibernate validation的时候使用。Validated是只用Spring Validator校验机制使用。 &#xff08;2&…

Mysql里的ibtmp1文件太大,导致磁盘空间被占满

目录 一、查看磁盘的时候发现磁盘空间100% 二、 排查的时候&#xff1a;查看是什么文件占用的时候&#xff0c;发现是数据库临时表空间增长的 三、为了避免以后再次出现ibtmp1文件暴涨&#xff0c;限制其大小&#xff0c;需在配置文件加入 四、重启Mysql实例&#xff08;重启后…