【备战蓝桥杯青少组】第二天 奇特的砖墙
真题
第十四届省赛 编程题 第5题
工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤1e6),且每列砖的数量为Ki(1≤Ki≤1e4,相邻砖块之间无缝隙),每块砖的长宽高都为1。小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么请你帮助小蓝找出最大矩形,并输出其面积。
例如:N=6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如下图:
图中虚线部分是一块面积最大的矩形,其面积为10.
输入描述:
第一行输入一个正整数N(1≤N≤1e6),表示这面砖墙由N列砖组成
第二行输入N个正整数Ki(1≤Ki≤1e4),依次表示每列砖的数量,正整数之间以一个空格隔开输出描述:
输出一个正整数,表示最大矩形的面积样例输入:
6
3 2 1 5 6 2样例输出:
10
解题思路
1.递归(标准解法)
找到最矮的列,分别计算左中右三个面积(分治),取其最大。
中:最矮列的列高*本区域的宽度(贪心假设)
左:最矮列左侧区域的最大矩形(递归调用)
右:最矮列右侧区域的最大矩形(递归调用)
2.伸展(娃儿创新)
遍历每一列,分别计算此列为中心,向两侧延展,直至遇到较矮的列,所形成的矩形的面积。
各面积存入列表,取其最小值。
代码
思路一 (递归版)
def tj1(wall):i=wall.index(min(wall))sL=tj1(wall[:i]) if i>0 else 0sR=tj1(wall[i+1:]) if i<len(wall)-1 else 0return max(wall[i]*len(wall),sL,sR)
思路二(伸展版)
def tj2(wall):sL=[]for i in range(len(wall)):s=1; h=wall[i]for j in range(i,0,-1):if(h>wall[j-1]):s+=i-j; breakelse:s+=i-1for j in range(i,len(wall)-1):if(h>wall[j+1]):s+=j-i; breakelse:s+=len(wall)-1-isL.append(s*h)return max(sL)
(增加一个用while代替for...else的版本)
def tj2w(wall): # while版sMax=0; N=len(wall)for i in range(N):w=1; h=wall[i]j=iwhile(j>0 and h<=wall[j-1]): j-=1w+=i-jj=iwhile(j<N-1 and h<=wall[j+1]): j+=1w+=j-isNew=w*hif(sNew>sMax): sMax=sNewreturn sMax
测试代码
def timeit(num=100):t1=[];t2=[];size=[]for i in range(num):K=random.choices(range(1,1000001),k=random.randint(1,10000)); N=len(K)size.append(N)t0=time.time()ans=tj2(K)t2.append(time.time()-t0)t0=time.time()ans=tj1(K)t1.append(time.time()-t0)return t1,t2,size
结论
两种思路都很容易实现和调试成功,从用时看标准版整体稍多于娃儿的思路的1/2,仅2%的用例娃儿胜出(不排除python的time模块计时不准)。
但从孩子的学习成果来看,我还是感到非常欣慰,特别是python to C++时,很显然伸展版的思路更契合(不用做列表的切片)
相关文章:

【备战蓝桥杯青少组】第二天 奇特的砖墙
真题 第十四届省赛 编程题 第5题 工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤1e6),且每列砖的数量为Ki(1≤Ki≤1e4,相邻砖块之间无缝隙),每块砖的长宽高都为1。小蓝为了美化这面…...
图像处理 -- 仿射变换之Affine Transformation
仿射变换(Affine Transformation) 仿射变换是图像处理中的一种基本操作,通过线性变换和平移实现图像的几何变换。仿射变换包括旋转、缩放、平移、翻转、错切(shear)等操作。 1. 仿射变换的作用 旋转:将图…...
Nuxt3【项目配置】nuxt.config.ts
按环境添加配置 export default defineNuxtConfig({// 生产环境的配置$production: {routeRules: {/**: { isr: true }}},// 开发环境的配置$development: {//} })运行时的配置 runtimeConfig export default defineNuxtConfig({runtimeConfig: {// 只在服务器端可用的私有键ap…...

中智讯“2024高校人工智能边缘应用项目实战师资培训班”圆满举办
7月24日——7月28日,中智讯“2024高校人工智能&边缘应用项目实战师资培训班”在昆明理工大学成功举办。本次培训由昆明理工大学人工智能产业学院主办,中智讯(武汉)科技有限公司承办。来自昆明理工大学、西南林业大学、云南民族…...

IIS发布打包后文件
1.打开IIS软件 2 添加网站, 自定义网站名称-选择要放置的资源路径-选择IP地址 3.打开放置的资源目录放置打包后文件 4.选择浏览 搜索不到IIS可进行一下操作 控制面板-程序和功能-启用或关闭windows功能-勾选IIS...

四个自定义 SHAP 图
超越 Python 包,创建 SHAP 值的定制可视化 SHAP 值是了解模型如何进行预测的绝佳工具。SHAP 包提供了许多可视化效果,使这个过程更加简单。话虽如此,我们不必完全依赖这个包。我们可以通过创建自己的 SHAP 图来进一步了解模型的工作原理。在本…...

为什么使用HTTPS?
HTTPS现在是所有Web活动的首选协议,因为它是用户保护敏感信息的最安全方式。 HTTPS不仅对请求用户信息的网站至关重要。除了用户直接发送的信息外,攻击者还可以从不安全的连接中跟踪行为和身份数据。 HTTP为网站所有者带来的好处除了数据安全之外&…...
软件设计-系统架构师(五十五)
1在网络规划中,政府内外网之间应该部署网络安全防护设备。在下图部署的设备A是(),对设备A作用描述错误的是()。 问题1 A IDS B 防火墙 C 网闸 D UTM 问题2 A 双主机系统,即使外网被黑客攻击…...
三分钟学会线缆电流估算
今天带你用三分钟的时间,学会电源线承受电流估算,不浪费时间,直接开始吧。 工作温度30℃,长期连续90%负载下的载流量 1.5平方毫米――14A 2.5平方毫米――26A 4平方毫米――32A 6平方毫米――47A 16平方毫米――92A 25平方毫米――120A 3…...

Snipaste 的一款替代工具 PixPin,支持 gif 截图、长截图和 OCR 文字识别,功能不是一点点强!
Snipaste 的一款替代工具 PixPin,支持 gif 截图、长截图和 OCR 文字识别,功能不是一点点强! PixPin 的名字来源于“Pixel Pin”,简单来说是一个截图、贴图的工具,但是 PixPin 以截图和贴图两大功能为核心做了大量的优…...
Oracle基础教程
体系结构 数据库 一个操作系统仅有一个数据库 实例 拥有一系列后台进程和存储结构,一个数据库可拥有一个或多个实例,一般只有1个实例 数据文件(.dbf/.ora) 数据文件是数据库的物理存储单元,一个表空间由一个或多…...

电脑如何录屏?三款电脑录屏工具分享
电脑如何录屏?作为一个经常需要录制电脑屏幕大职场人,不是为了制作教程、记录会议,就是偶尔想自己做个游戏解说视频。市面上的录屏软件琳琅满目,经过一番尝试和比较,我选出了三款我个人认为表现不错的软件,…...

idea2024建立maven web项目servlet 6.0
(1) 下载好tomcat 10.1.28 打开tomcat.apache.org官网下载 (2)配置好maven (3)idea 2024打开,建立项目 选择maven java项目 (4)在项目src/main/下 建立webapp/WEB-INF目录,在…...

游戏开放式新手引导框架设计
强制性引导:只能点某个按钮 优:程序简单 缺: 玩家体验差 开放式引导:不强制点 优:玩家体验好 缺: 程序复杂 需求分析: 1.开放式引导,引导是到达某个条件后进行一系列行为(…...

【Hot100】LeetCode—189. 轮转数组
目录 1- 思路自定义 reverse 翻转函数 2- 实现⭐189. 轮转数组——题解思路 3- ACM 实现 原题链接:189. 轮转数组 1- 思路 自定义 reverse 翻转函数 2- 实现 ⭐189. 轮转数组——题解思路 class Solution {public void rotate(int[] nums, int k) {k % nums.lengt…...

javaweb学习之HTML(一)
推荐学习使用网站 w3school 在线教程 认识HTML HTML(HyperText Markup Language)是超文本标记语言,它是一个用于创建网页和网页应用程序的标准标记语言。HTML文档由一系列的元素(elements)组成,这些元素通…...

项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)
若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141334834 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…...

【数据结构】汇总八、排序算法
排序Sort 【注意】本章是 排序 的知识点汇总,全文1万多字,含有大量代码和图片,建议点赞收藏(doge.png)!! 【注意】在这一章,记录就是数据的意思。 排序可视化网站: D…...
Java-分割list并执行多线程任务的工具类
要创建一个用于分割列表并执行多线程任务的工具类,你可以使用 Java 的 ExecutorService 和 ThreadPoolExecutor 来实现。下面是一个详细的示例,展示了如何创建这样一个工具类。 步骤 1: 创建线程池 首先,创建一个线程池来执行任务。 步骤 2: 分割列表 接着,定义一个方…...
Springboot-从服务器获取一个输入流,转成视频文件存到oss
要在Spring Boot应用中从服务器获取一个输入流,然后将该流转换为视频文件并存储到阿里云 OSS中,你可以遵循以下步骤: 设置阿里云OSS客户端:首先,你需要配置阿里云OSS客户端,以便能够上传文件到OSS。 获取输入流:使用HTTP客户端(如RestTemplate或WebClient)从服务器…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...