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

今日复习内容:做题

例题1:体育健将

问题描述:

小蓝作为班级里的体育健将,他被安排在校运会时参加n个体育项目,第i个体育项目参赛需要耗时ai分钟,赛后休息需要bi分钟(这意味着当他参加完这场比赛后需要经过bi分钟才能再次参加其他项目)。

由于小蓝实在太强了,无论 参加任何比赛他都可以拿到金牌,但他能够参加校运会的时间有限,最多只能参加k分钟,请问他最多能拿几块金牌?

输入格式:

第一行包含两个整数n和k,表示体育项目数量和小蓝的可参加校运会时间;

第二行包含n个整数a1,a2,...,an,表示每个项目需要的参赛时间;

第三行包含n个整数b1,b2,...,b3,表示每个项目后面需要的休息时间;

数据范围保证:1 <= n <= 2 * 10^5,1 <= ai,bi,k <= 10^8

输出格式:

输出一个整数,表示在k分钟内小蓝最多可以拿到几个金牌

参考答案:

from itertools import accumulate
import bisect
n,k = map(int,input().split())
li1 = list(map(int,input().split()))
li2 = list(map(int,input().split()))
li = [[li1[i] + li2[i],li1[i],li2[i]] for i in range(n)]
li.sort(key = lambda x:x[0])
pre = [li[0][0]]
for i in range(1,n):pre.append(pre[-1] + li[i][0])
ans = 0
for i in range(n):if k < li[i][1]:continuetmp = k - li[i][1]num = bisect.bisect_right(pre,tmp)if num <= i:ans = max(ans,num + 1)elif num >= n:ans = max(ans,n)else:ans = max(ans,bisect.bisect_right(pre,k + li[i][2]))
print(ans)

运行结果:

 

以下是我对此题的理解:

1.输入处理

首先,从输入中读取两个整数n和k,分别表示体育项目的数量和小蓝能参加的时间;

然后,读取了两行整数,分别表示每个项目的参赛时间和休息时间。

2.数据处理

接下来,将每个项目的参赛时间和休息时间相加得到总时间,并将其按照其总时间从小到大排序,同时记录下每个项目的参赛时间和休息时间。

使用accumulate函数计算出累加的总时间,这个总时间列表保存在pre中。

3.计算最多金牌数量

初始化变量ans为0,表示最多金牌数量;

然后对每个项目进行遍历,如果当前项目的参赛时间已经超过了小蓝能够参赛的总时间k,就跳过该项目;

如果参加档期那项目的时间小于等于小蓝能够参赛的时间k,计算剩余时间tmp;

使用bisect_right函数在累加的总时间列表pre中找到剩余时间tmp可以容纳的项目数量num;

如果num小于等于当前的索引i,说明剩余时间只能容纳当前项目及之前的项目,此时最多可以获得的金牌数量为num + 1;

如果num大于等于当前项目的数量n,说明剩余时间可以容纳所有项目,此时最多可以获得的金牌数量为n;

否则,剩余时间可以容纳当前项目及之后的某些项目,通过bisect_right函数找到在剩余时间内可以容纳的项目数量,并更新最多金牌数量ans。

4.输出结果

输出最多金牌数量ans

这道题是通过排序和累加来优化计算过程

然后,我稍微改了一下,也可以这样:

from itertools import accumulate
import bisect# 读取输入,n表示体育项目数量,k表示小蓝可参加校运会时间
n, k = map(int, input().split())# 读取每个体育项目的参赛时间和休息时间
li1 = list(map(int, input().split()))  # 参赛时间列表
li2 = list(map(int, input().split()))  # 休息时间列表# 将每个项目的总时间(参赛时间+休息时间)、参赛时间、休息时间组成一个元组,并按总时间从小到大排序
li = [[li1[i] + li2[i], li1[i], li2[i]] for i in range(n)]
li.sort(key=lambda x: x[0])# 计算累加的总时间列表
pre = list(accumulate([x[0] for x in li]))# 初始化最多金牌数量为0
ans = 0# 遍历每个项目
for i in range(n):# 如果参加当前项目的时间已经超过了小蓝能参加的总时间k,则跳过该项目if k < li[i][1]:continue# 计算剩余时间tmp = k - li[i][1]# 使用二分查找在累加的总时间列表pre中找到剩余时间tmp可以容纳的项目数量numnum = bisect.bisect_right(pre, tmp)# 如果num小于等于当前项目的索引i,说明剩余时间只能容纳当前项目及之前的项目,此时最多可以获得的金牌数量为num + 1if num <= i:ans = max(ans, num + 1)# 如果num大于等于项目的数量n,说明剩余时间可以容纳所有项目,此时最多可以获得的金牌数量为nelif num >= n:ans = max(ans, n)# 否则,剩余时间可以容纳当前项目及之后的某些项目else:# 通过二分查找在剩余时间内可以容纳的项目数量,并更新最多金牌数量ansans = max(ans, bisect.bisect_right(pre, k + li[i][2]))# 输出最多金牌数量
print(ans)

例题2:小浩的ABC

问题描述:

小浩有一个整数X,他想找到一个三元组(A,B,C)满足:

1 <= A,B,C <= 10^6;      A * B + C = X

在满足条件的情况下,让(B,C,A)的字典序最小,如果不存在这样的三元组则输出-1。

输入格式:

第一行输入一个整数T,表示测试数据的组数;

接下来T行每行输入一个整数X,含义如题所示。

输出格式:

对于每组测试数据,输出A,B,C的值,如果不存在这样的三元组则输出-1,并换行。

参考答案:

def printf(x):if x == 1:print(-1)elif x <= 1e6 + 1:print(x - 1, 1, 1)else:if x % 1e6 == 0:print(int(1e6), int(x // 1e6), int(1))else:print(int(1e6), int(x // 1e6), int(x % 1e6))
T = int(input())
for i in range(T):x = int(input())printf(x)

运行结果:

 

以下是我对这道题的理解:

先定义一个函数,比如printf,该函数接受一个整数x作为输入;

首先检查x的取值:

如果x等于1,则输出-1,因为无法找到满足条件的三元组;

如果x <= 1e6,则输出A 取x - 1,B和C取1的三元组,因为此时(1,1,x - 1)满足条件,并且字典序最小。

如果x > 1e6 + 1,则需要进一步判断;

如果x能被1e6整除,则将A设为1e6,B设为x除以1e6的商,C为1;

否则,将A设为1e6,B设为x除以1e6的商,C设为x除以1e6的余数。


例题3:小新的质数序列挑战

问题描述:

小新是一个热爱数学的孩子,他特别喜欢研究质数。最近,他发现了一个有趣的问题,他想用两个整数A和B来构造两个质数序列。

让我们设P表示一个长度为N的质数序列,使得序列中所有数的和为A;

设Q表示一个长度为M的质数序列,使得序列中所有数的和为B。

设X 表示所有有效对(Pi,Qi)(满足条件1 <= i <= N,1 <= i <= M)的最大绝对差。

现在,小新的挑战就是找出所有可能的P和Q序列中,X的最小可能值。

更正式地说,对于所有可能的序列P和Q,找出max(|Pi - Qi|)的最小值,其中1 <= i <= N,1 <= i <= M。

如果无法形成一个序列,请输出-1。

注意,|X|表示数字X的绝对值。例如|-4| = 4,|7| = 7

输入格式:

首先是一个整数T,表示测试用例的数量,接下来是T个测试用例。

每个测试用例包含两个整数A和B。

数据范围保证:1 <= T <= 10^5,1 <= A,B <= 10^18。

输出格式:

对于每个测试用例,如果无法形成任何一个序列,则输出-1,否则打印max(|Pi - Qi|)的最小值。

参考答案:

import math
t = int(input())
for i in range(t):A,B = map(int,input().split())if min(A,B) == 1:print(-1)else:if math.gcd(A,B) > 1:print(0)else:print(1)

运行结果:

 

以下是我对此题的理解:

首先读取输入的测试用例数量t;

对于每个测试用例:

读取两个整数A和B,表示要构造的质数序列的和;

如果A和B中有任何一个等于1,那么无法构造出满足条件的质数序列,因为质数序列必须大于1,所以直接输出-1;否则,如果A和B的最大公约数大于1,则说明A和B有共同的质因数,此时无法构造出满足条件的质数序列,因为每个质数只能出现一次,所以最大 绝对差为0,输出0。

如果A和B的最大公约数等于1,说明A和B互质,可以构造出满足条件的质数序列。此时,任意一个质数序列的质数序列的和的最大最大绝对差为1,因为任意两个互质的正整数的差的绝对值至少为1,所以输出1。

主要是利用质数的性质以及最大公约数的概念来判断能否构造出满足条件的质数序列,以及求出最大绝对差的最小值。


例题4:小蓝的无限集

问题描述:

小蓝有一个无限集,该集合生成方式如下:

1.集合里面初始元素为1;

2.如果x在集合中,则x * a,x + b均在集合中。

例如a = 2,b = 3时,该集合5个最小元素如下:

1

2。因为2 = 1 * 2

4。因为4 = 1 + 3

5。因为5 = 2 + 3

7。因为7 = 5 + 2

现在有t组数据,每组数据给定你3个正整数a,b,n,由若干个空格分割,含义如题所示。

输入格式:

第一含输入一个整数t,表示测试案例组数。

接下来t行,每行输入3个正整数a,b,n,由若干个空格分开,含义如题所述。

输出格式:

对于每组数据,如果n在集合中,输出Yes,否则输出No。

参考答案:

t = int(input())
for i in range(t):a,b,n = map(int,input().split())if a == 1:if (n - 1) % b == 0:print('Yes')else:print('No')else:cnt = 1flag = Falsewhile cnt <= n:if (n - cnt) % b == 0:flag = Truebreakcnt *= aif flag:print('Yes')else:print('No')

运行结果:

 

OK,这篇我只写这些题,下一篇继续!

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

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

相关文章

【AIGC大模型】InstantID 赏析

论文地址&#xff1a;https://arxiv.org/abs/2401.07519 InstantID 主页&#xff1a;https://instantid.github.io/ Demo &#xff1a;https://huggingface.co/spaces/InstantX/InstantID code&#xff1a; InstantID/InstantID: InstantID : Zero-shot Identity-Preserving…

计算机组成原理-第一/二章 概述和数据的表示和运算【期末复习|考研复习】

文章目录 前言第一章 计算机组成原理 概述及各种码1.1 计算机硬件的基本组成1.1.1 存储器1.1.2 运算器1.1.3 控制器 1.2 计算机的工作过程1.3 计算机的性能指标1.4 各个字长区别与联系 第二章 数据的表示与运算2.1 ASCII码2.2 各种码2.3 浮点数 总结 前言 给大家整理了一下计算…

雅特力AT32L021首款低功耗MCU震撼登场

雅特力于2月28日正式发布AT32L021首款入门级低功耗MCU&#xff0c;搭配不同容量Flash、SRAM&#xff0c;提供7种封装类型共21个型号选择&#xff0c;最小封装面积仅3x3mm。为降低能耗&#xff0c;延长设备运作时间&#xff0c;AT32L021系列支持多种能耗模式和休眠模式&#xff…

Mysql Day07

存储过程 -- 存储过程基本语法 -- 创建 create procedure p1() begin select count(*) from student; end; -- 调用 call p1(); -- 查看 select * from information_schema.ROUTINES where ROUTINE_SCHEMA itcast; show create procedure p1; -- 删除 drop procedure if exis…

TCP/UDP模型:2024/2/29

作业1&#xff1a;TCP模型 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.129" #define SER_PORT 8899int main(int argc, const char *argv[]) {//1.创建用于连接的套接字文件int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){per…

深入理解nginx的https alpn机制

目录 1. 概述2. alpn协议的简要理解2.1 ssl的握手过程2.2 通过抓包看一下alpn的细节3. nginx源码分析3.1 给ssl上下文设置alpn回调3.2 连接初始化3.3 处理alpn协议回调3.4 握手完成,启用http协议4.4 总结阅读姊妹篇:深入理解nginx的https alpn机制 1. 概述 应用层协议协商(…

基于Siamese网络的zero-shot意图分类

原文地址&#xff1a;Zero-Shot Intent Classification with Siamese Networks 通过零样本意图分类有效定位域外意图 2021 年 9 月 24 日 意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务&#xff0c;该标签…

网络编程学习

思维导图 代码练习 TCP实现通信 服务器端代码 #include <myhead.h> #define SER_IP "192.168.152.135" #define SER_PORT 8910 int main(int argc, const char *argv[]) {//&#xff11;创建用于监听的套接字int sfd -1;sfd socket(AF_INET,SOCK_STREAM,0)…

【mysql】 1819 - Your password does not satisfy the current policy requirements

创建mysql账户密码时候提示&#xff1a; 1819 - Your password does not satisfy the current policy requirements 1819-您的密码不符合当前策略要求 下面是执行的sql DROP DATABASE IF EXISTS company;CREATE DATABASE company CHARACTER SET utf8mb4 ;grant all on com…

VuePress + GitHub 搭建个人博客踩坑记录

最近想给我教练搭个网站,本来选的是 VuePress 框架,也折腾完了,起码是搭建出来了,踩的坑也都总结好了 但是最近发现了一个更简洁的模板: VuePress-theme-hope ,所以最终网站使用的样式是这个 不过我觉得这里面踩坑的记录应该还是有些价值的,分享出来,看看能不能帮到一些小伙伴~…

2000-2022年上市公司绿色专利申请占比/数据

2000-2022年上市公司绿色专利申请占比数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家知识产权局、WIPO绿色专利清单 3、指标&#xff1a;年份、股票代码、股票简称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、…

黑马瑞吉外卖练习笔记

day2 员工管理 完善登录 问题&#xff1a;用户不登录&#xff0c;直接访问系统首页&#xff0c;照样可以正常访问。我们希望&#xff0c;只有登录成功后才可以访问系统中的页面&#xff0c;如果没有登录则跳转到登录页面 怎么实现&#xff1f; 用过滤器或拦截器&#xff0c;在…

[数据结构 C++] AVL树的模拟实现

文章目录 1、AVL树1.1 AVL树的概念 2、AVL树节点的定义3、AVL树的插入和旋转3.1 左单旋左旋代码实现 3.2 右单旋右旋代码实现 3.3 右左双旋右左双旋的代码实现 3.4 左右双旋左右双旋的代码实现 3.5 insert接口实现 4、判断是否为AVL树判断AVL树的代码实现 5、AVL树的性能 问题引…

刷题第3天(简单题):LeetCode203--移除链表元素--虚拟头结点

LeetCode203:给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a;输入…

面试数据库篇(mysql)- 07索引创建原则与失效及优化

索引创建原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。 4). 如果是字符…

flink下载安装部署说明

下载 下载地址 flink-1.16.2下载安装包&#xff0c;flink-1.16.2-bin-scala-2.12.zip资源-CSDN文库 安装 解压目录 启动集群 ./start-cluster.sh 提交作业 ./bin/flink run examples/streaming/WordCount.jar 查看日志 停止集群 ./bin/stop-cluster.sh 开启webui vim c…

数据结构与算法 - 数组与二分查找 + Leetcode典型题

1. 什么是数组 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 C中二维数组在地址空间上也是连续的。 需注意&#xff1a; 数组的下标从0开始。数组内存空间的地址是连续的。数组的元素是不能删的&#xff0c…

【HDFS】Decommision(退役) EC数据节点剩最后几个块卡住的问题

一、背景 近期操作退役EC集群的节点。在退役的过程中,遇到了一些问题。特此总结一下。 本文描述的问题现象是: 每一批次退役10个节点,完全退役成功后开始操作下一批。 但是,中间有一批次有2台节点的Under Replicated Blocks一直是1,不往下降。 处于Decommissioning状态卡…

鸿蒙OpenHarmony多线程能力场景化示例实践

简介 在OpenHarmony应用中&#xff0c;每个 进程 都会有一个主线程&#xff0c;主线程主要承担执行UI绘制操作、管理ArkTS引擎实例的创建和销毁、分发和处理事件、管理Ability生命周期等职责&#xff0c;具体可参见 线程模型概述 。因此&#xff0c;开发应用时应当尽量避免将耗…

Sora技术原理解析

1.Sora简介 Sora是一个基于大规模训练的文本控制视频生成扩散模型。 Sora能够生成高达1分钟的高清视频&#xff0c;涵盖广泛的视觉数据类型和分辨率。 Sora使用简单的文本描述&#xff0c;使得视频创作变得前所未有的简单和高效。 Sora的一些能力&#xff1a; Text-to-video…