python 基础知识点(蓝桥杯python科目个人复习计划51)

今日复习计划:做复习题

例题1:大石头的搬运工

问题描述:

在一款名为“大石头的搬运工”的游戏中,玩家需要 操作一排n堆石头,进行n - 1轮游戏。

每一轮,玩家可以选择一堆石头,并将其移动到任意位置。

在n - 1轮游戏移动结束时,要求将所有的石头移动到一起(即所有石头的位置相同)即为成功。

移动的费用为石头的重量乘以移动的距离。例如,如果一堆重量为2的石头从位置3移动到位置5,那么费用为2 * (5 - 3) = 4.

请计算出所有合法方案中,将所有石头移动到一起时的最少费用。

可能有多堆石头在一个位置上,但是一轮只能选择移动其中一堆。

输入格式:

第一行一个整数n,表示石头的数量。

接下来n行,每行两个整数wi和pi,分别表示第i个石头的重量和初始位置。

输出格式:

输出一个整数,表示最小的总移动费用。

参考答案:

import math
n = int(input())
li = []
for i in range(n):li.append(list(map(int,input().split())))
li.sort(key = lambda x:x[1])
pre = [0]
nex = [0]
s1 = li[0][0]
s2 = li[-1][0]
for i in range(1,n):pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))s1 += li[i][0]
for i in range(n-2,-1,-1):nex.append(nex[-1] + (s2)*(li[i+1][1] - li[i][1]))s2 += li[i][0]
nex.reverse()
res = math.inf
for i in range(n):res = min(res,pre[i] + nex[i])
print(res)

运行结果:

以下是我对此题的理解:

import math:

这行导入了python的math模块,用于进行数学计算。

n = int(input())

li = []

for i in range(n):li.append(list(map(int,input().split())))

首先,从标准输入读取一个整数n,表示石头的数量。然后,通过一个循环读取n行输入,每行包括两个整数wi和pi,分别表示第i个石头的重量和初始位置,这些信息以列表的形式存储在li中

li.sort(key = lambda x:x[1])

对列表li按初始位置进行排序,以便后续计算。

pre = [0]

nex = [0]

s1 = li[0][0]

s2 = li[-1][0]

初始化四个变量:pre,nex,s1,s2。pre和nex分别用于储存每个位置左侧和右侧的移动总费用,而s1和s2分别表示左侧和右侧的石头重量之和的累加值,初始值分别为第一个和最后一个石头的重量。

for i in range(1,n):pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))

s1 += li[i][0]

接下来,变量列表li中的每个石头,计算每个石头左侧的移动总费用。对于每个位置i,其左侧移动总费用等于前一个位置的左侧移动总费用加上当前位置的移动费用,其中移动费用等于当前位置当前位置左侧石头重量之和乘以当前位置与前一个位置的距离。更新s1为当前位置左侧的石头重量之和。

for i in range(1,n)

这个循环从1开始到n - 1结束,遍历除了第一个石头以外的所有石头。因为第一个石头的位置是我们用来初始化s1的起点,所以不需要再次计算它的移动费用

pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))

这行代码是计算并存储到当前位置i为止,所以左侧石头移动到当前位置的总费用,pre[-1]是上一个位置的移动总费用,(s1)*(li[i][1] - li[i-1][1])是从上一个位置到当前位置的移动费用,其中s1是到当前位置为止,左侧所有石头的重量和,li[i][1] - li[i-1][1]是当前位置与上一个位置的距离。将这两者相加得到当前位置的总移动费用,并将其追加到pre列表中

s1 += li[i][0]

这行代码更新了s1的值。每遍历到一个新的位置,都将当前位置的石头重量加到s1上,因此s1始终保持为到当前位置为止,左侧所有石头的重量和。

for i in range(n - 2,-1,-1)

这个循环从倒数第二个石头开始向左遍历,直到第一个石头。因为最后一个石头的位置是我们用来初始化s2的起点,所以不需要再次计算它的移动费用

nex.append(nex[-1] + (s2)*(li[i + 1][1] - li[i][1]))

这行代码是计算并储存到当前位置i为止,所有右侧石头移动到当前位置的总移动费用,nex[-1]是上一个位置的总移动费用,(s2)*(li[i + 1][1] - li[i][1])是从上一个位置移动到当前位置的移动费用,其中s2是到当前位置为止,右侧所有石头的重量和,li[i + 1][1] - li[i][1]是当前位置与下一个位置之间的距离。将这两者相加得到当前位置的总移动费用,并将其追加到nex列表中。

s2 += li[i][0]:这行代码更新了s2的值,每遍历到一个新的位置,将当前石头的重量叠加到s2上,因此s2始终保持为到当前位置为止,右侧所有石头的重量和。

nex.reverse():最后,由于我们是从左向右计算移动费用的,得到的nex列表中元素的顺序与实际的位置顺序相反,所以需要将nex翻转过来,以便后续计算最小总移动费用是能够对应正确位置。


例题2:最大数组和

问题描述:

小明是一名勇敢的探险家,他在一次探险途中发现了一组神秘的宝石,这些宝石的价值都不同。但是,他发现这些宝石会随着时间的推移逐渐失去价值,因此他必须在规定的次数内对它们进行处理。

小明想要最大化这些宝石的总价值。他有两种处理方式:

1.选出最小的两个宝石,并将他们从宝石组中删除。

现在,给你小明手上的宝石组,请你告诉他在规定的次数内,最大化宝石的总价值是多少。

输入格式:

第一行包含一个整数t,表示数据组数。

对于每组数据,第一行包含两个整数n和k,表示宝石的数量和规定的处理次数。

第二行包含n个整数a1,a2,a3,...,an,表示每个宝石的价值。

输出格式:

对于每组数据,输入一个整数,表示在规定的次数内,最大化宝石的总价值。

参考答案:

import math
t = int(input())
for i in range(t):n,k = map(int,input().split())li = list(map(int,input().split()))li.sort()pex = [0]for i in range(n):pex.append(pex[-1] + li[i])ans = -math.inffor i in range(k + 1):ans = max(ans,pex[n - (k - i)] - pex[2 * i])print(ans)

运行结果:

 

以下是我对此题的理解:

1.输入

第一行输入一个整数t,表示数据组数

对于每组数据,第一行输入两个整数n和k,分别表示宝石的数量和规定的处理次数。

第二行输入n个整数,表示每个宝石的价值

2.数据处理

程序进入一个循环,循环t次,处理每组数据

对于每组数据,首先将宝石价值列表li进行排序,从小到大排序

3.计算累积和

创建一个列表pex,初始为[0]

然后,对排列后的宝石价值列表进行循环,计算累积和,并将结果存储在pex中

这样,pex中的第i个元素表示前i个宝石的总价值。

4.计算最大总价值

初始化ans为负无穷,表示初始时宝石总价值为最小值

对于处理次数k的所以可能值,从0到k,进行循环

计算当前处理次数下,剩余宝石的最大总价值

使用max函数更新ans,保留最大的总价值

5.输出结果

输出ans,即最大化宝石总价值的结果。

这道题使用了贪心算法的思想,在每次处理中选择了当前最优的方案,以求得最终的最优解。


OK,今天去做别的事情了,所以我只做了两个题,进度有点慢,明天得快一点。

下一篇继续!

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Node.js开发一个文件上传功能

在现代 Web 应用程序开发中,文件上传是一个非常常见且重要的功能。今天我们将通过 Node.js 来开发一个简单而强大的文件上传功能。使用 Node.js 来处理文件上传可以带来许多好处,包括简单的代码实现、高效的性能和灵活的配置选项。 首先,我们…

【Pytorch深度学习开发实践学习】Pytorch实现LeNet神经网络(1)

1.model.py import torch.nn as nn import torch.nn.functional as F引入pytorch的两个模块 关于这两个模块的作用,可以参考下面 Pytorch官方文档 torch.nn包含了构成计算图的基本模块 torch,nn.function包括了计算图中的各种主要函数,包括&#…

爬虫入门五(Scrapy架构流程介绍、Scrapy目录结构、Scrapy爬取和解析、Settings相关配置、持久化方案)

文章目录 一、Scrapy架构流程介绍二、Scrapy目录结构三、Scrapy爬取和解析Scrapy的一些命令css解析xpath解析 四、Settings相关配置提高爬取效率基础配置增加爬虫的爬取效率 五、持久化数据1.在items中新建类2.在解析中,得到item对象,并且yield3.配置文件…

LabVIEW开发FPGA的高速并行视觉检测系统

LabVIEW开发FPGA的高速并行视觉检测系统 随着智能制造的发展,视觉检测在生产线中扮演着越来越重要的角色,尤其是在质量控制方面。传统的基于PLC的视觉检测系统受限于处理速度和准确性,难以满足当前生产需求的高速和高精度要求。为此&#xf…

Tomcat线程池原理(上篇:初始化原理)

文章目录 前言正文一、从启动脚本开始分析二、ProtocolHandler 的启动原理三、AbstractEndPoint 的启动原理四、创建默认线程池五、参数配置原理5.1 常规的参数配置5.2 自定义线程池5.3 测试自定义线程 前言 在Java Web的开发过程中,Tomcat常用的web容器。SpringBo…

书生·浦语大模型全链路开源体系介绍

背景介绍 随着人工智能技术的迅猛发展,大模型技术已成为当今人工智能领域的热门话题。2022 年 11 月 30 日,美国 OpenAI 公司发布了 ChatGPT 通用型对话系统 并引发了全球 的极大关注,上线仅 60 天月活用户数便超过 1 亿,成为历史…

密码学系列(四)——对称密码2

一、RC4 RC4(Rivest Cipher 4)是一种对称流密码算法,由Ron Rivest于1987年设计。它以其简单性和高速性而闻名,并广泛应用于网络通信和安全协议中。下面是对RC4的详细介绍: 密钥长度: RC4的密钥长度可变&am…

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求,解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站:https://fanyi.so.com/# 要求:爬取360翻译数据包,实现翻译功能 所需第三方库 …

【OnlyOffice】 桌面应用编辑器,版本8.0已发布,PDF表单、RTL支持、Moodle集成、本地界面主题

ONLYOFFICE桌面编辑器v8.0是一款功能强大、易于使用的办公软件,适用于个人用户、企业团队和教育机构,帮助他们高效地处理文档工作并实现协作。无论是在Windows、macOS还是Linux平台上,ONLYOFFICE都能提供无缝的编辑和共享体验。 目录 ONLYOFF…

Jmeter接口测试+压力测试

Jmeter-http接口脚本 一般分五个步骤:(1)添加线程组 (2)添加http请求 (3)在http请求中写入接入url、路径、请求方式和参数 (4)添加查看结果树 (5)调用接口、…

化学分子Mol2文件格式与使用注意事项

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、Mol2文件示例二、 Mol2文件主要结构解释及注意事项MOLECULE 字段解释ATOM 字段解释BOND 字段解释SUBSTRUCTURE字段解释 总结参考资料 前言 Mol2格式文件是一个ASCII 文件,由Tripos…

STM32控制max30102读取血氧心率数据(keil5工程)

一、前言 MAX30102是一款由Maxim Integrated推出的低功耗、高精度的心率和血氧饱和度检测传感器模块,适用于可穿戴设备如智能手环、智能手表等健康管理类电子产品。 该传感器主要特性如下: (1)光学测量:MAX30102内置…

Rocky Linux 运维工具yum

一、yum的简介 ​​yum​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包,自动处理依赖关系,方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…

Docker 常用操作命令备忘

Docker 一旦设置好了环境,日常就只要使用简单命令就可以运行和停止。 于是,我每次用的时候,都想不起来一些关键性的命令到底怎么用,特此记录。 一、镜像管理 从公有仓库拉取镜像 (对于使用苹果电脑 M1/M2/M3 芯片的 …

完全分布式运行模式

完全分布式运行模式 分析:之前已经配置完成 ​ 1)准备3台客户机(关闭防火墙、静态ip、主机名称) ​ 2)安装JDK ​ 3)配置环境变量 ​ 4)安装Hadoop ​ 5)配置环境变量 ​ 6&am…

Springboot集成Druid实现监控功能

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。Druid可以很好的监控DB池连接和SQL的执行情况&#…

AOSP10 替换系统launcher

本文实现将原生的launcher 移除&#xff0c;替换成我们自己写的launcher。 分以下几个步骤&#xff1a; 一、新建一个自己的launcher项目。 1.直接使用android studio 新建一个项目。 2.修改AndroidManifest.xml <applicationandroid:persistent"true"androi…

nginx实现http反向代理

一、代理概述 1、代理概念 1.1 正向代理&#xff08;Forward Proxy&#xff09; 概念&#xff1a;正向代理是位于客户端和目标服务器之间的代理服务器&#xff0c;代表客户端向目标服务器发送请求。客户端将请求发送给代理服务器&#xff0c;然后代理服务器将请求转发给目标服…

Prompt 编程的优化技巧

一、为什么要优化 一&#xff09;上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文&#xff0c;比如你输入超过 16k 的长文本&#xff0c;ChatGPT 会提示文本过大&#xff0c;为了避免 GPT 无法回复&#xff0c;需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

【手机端测试】adb基础命令

一、什么是adb adb&#xff08;Android Debug Bridge&#xff09;是android sdk的一个工具 adb是用来连接安卓手机和PC端的桥梁&#xff0c;要有adb作为二者之间的维系&#xff0c;才能让用户在电脑上对手机进行全面的操作。 Android的初衷是用adb这样的一个工具来协助开发人…