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 浮点数 总结 前言 给大家整理了一下计算…

网络安全与代理技术:解密 SOCKS5、代理IP 和 HTTP

在当今数字化的世界中&#xff0c;网络安全问题备受关注。作为网络安全的重要组成部分&#xff0c;代理技术在保护个人隐私和网络安全方面发挥着关键作用。本文将以教授的身份&#xff0c;简明扼要地介绍 SOCKS5 代理、代理IP、HTTP 代理等关键词&#xff0c;帮助读者了解这些技…

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

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

spark中dataframe起别名对join过程的影响

toDF().as("a").join(df2,Seq("seq1"),"right") .filter($"a.seq1".isNotNull)toDF().as("a").join(df2,Seq("seq1"),"right") .filter($"seq1".isNotNull)今天之前我认为这里不应该用别名&a…

2.29文件IO-进程 作业

1.要求将当前路径下&#xff0c;所有文件的权限及最后一次的访问时间提取出来&#xff0c;写入到file.txt中! !提示: opendir readir stat-->提取出来的数据写入到file.xt中 #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include &l…

详解kubernetes中的Pod生命周期

目录 1.1 Pod生命周期概述 1.2 创建和终止 1.2.1 Pod的创建过程 1.2.2 Pod的终止过程 1.3 初始化容器 1.3.1 案例 1.4 容器探测 1.4.1 Exec示例 1.5 重启策略 1.1 Pod生命周期概述 Pod中的生命周期主要包含以下过程&#xff1a; pod创建过程 运行初始化容器&#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…

weak 的实现原理

iOS 在运行时维护着一个全局的弱引用表&#xff0c;该表是一个 hash 表&#xff0c;hash表的 key 是 weak 对象的地址&#xff0c;value 是指向该对象的所有 weak 指针的地址数组。 /**全局的弱引用表&#xff0c;本质是一个hash结构&#xff0c;object作为key, weak_entry_…

npm 设置取消代理

npm 设置淘宝镜像源&#xff1a;npm install -g cnpm --registryhttps://registry.npm.taobao.org npm 查看当前配置信息 npm config listnpm 设置代理 npm config set proxy 127.0.0.1:7890 npm config set https-proxy 127.0.0.1:7890删除代理信息 npm config delete pro…

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…

【蓝桥杯】赢球票(模拟、枚举、搜索)

一.题目描述 某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。 主持人拿出 N 张卡片&#xff08;上面写着 1~N 的数字&#xff09;&#xff0c;打乱顺序&#xff0c;排成一个圆圈。你可以从任意一张 卡片开始顺时针数数: 1,2,3..... 如果数到的数字刚好和卡片上的数字…

深入理解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;该标签…

Shell:字符串的截取和替换

#/bin/sha="hello, world, 88"echo ${a:0}echo ${a:2:3}echo ${a/l/ii}echo ${a//l/ii}echo ${a#he}echo ${a#*,}echo ${a##*,}echo ${a%88}echo ${a%,*}echo ${a%%,*} 运行程序输出: hello, world, 88 llo heiilo, world, 88 heiiiio, woriid, 88 llo, world, 88 w…

网络编程学习

思维导图 代码练习 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;年份、股票代码、股票简称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、…

Redis 由浅入深 (6) - Redis批量删除key

redis 删除缓存 日常工作当中经常会遇到删除Redis key的问题,如果是删除某个key,使用 DEL keyname 或者 EXPIRE keyname ttl 都可以实现。但如果想要一次性删除多个key应该怎么处理呢?Redis本身并不支持批量删除key的操作,下面我们就来看看如何巧妙地处理这类问题。 场景一…