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

news2024/10/6 12:28:40

今日复习内容:做题

例题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]:
        continue
    tmp = 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可以容纳的项目数量num
  num = bisect.bisect_right(pre, tmp)
  
  # 如果num小于等于当前项目的索引i,说明剩余时间只能容纳当前项目及之前的项目,此时最多可以获得的金牌数量为num + 1
  if num <= i:
    ans = max(ans, num + 1)
  # 如果num大于等于项目的数量n,说明剩余时间可以容纳所有项目,此时最多可以获得的金牌数量为n
  elif num >= n:
    ans = max(ans, n)
  # 否则,剩余时间可以容纳当前项目及之后的某些项目
  else:
    # 通过二分查找在剩余时间内可以容纳的项目数量,并更新最多金牌数量ans
    ans = 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 = 1
        flag = False
        while cnt <= n:
            if (n - cnt) % b == 0:
                flag = True
                break
            cnt *= a
        if flag:
            print('Yes')
        else:
            print('No')

运行结果:

 

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

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

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

相关文章

如何使用程序调用通义千问

之前分享了&#xff0c;使用程序调用文心一言。但是很快文心一言就要收费了。阿里的提供了暂时免费版的基础模型&#xff0c;效果还算可以。所以再分享一下&#xff0c;如何使用程序来调用通义千问的模型。 整体很简单&#xff0c;分三步&#xff1a;导入依赖&#xff1b;获取A…

STL-map和set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器(类型是双向迭代器) 4. set的容量 5.set修改操作 6、operator 7. set的使用举例 3.2 map 3.2.1map介绍 3.2.2map的…

QT 打开项目提示 no valid settings file could be found

QT 打开项目提示 no valid settings file could be found 解决方案&#xff1a; 删除对应项目中的.user 文件 在打开项目&#xff0c;而后点击“项目”&#xff0c;在Configure project 栏中选择合适的kits然后点击configure project按钮即可。

C++面试干货---带你梳理常考的面试题(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 1.struct 和 class 区别 1.默认访问权限&#xff1a;struct中的成员默认为public&#xff0c;而class中的成员默认为priv…

绘图设计:用Draw.io绘制图形技巧大全(含统一建模语言UML模板)

一、常见UML模板 1.流程图 2.用例图 include是包含关系&#xff0c;extend是扩展关系 简而言之&#xff0c;include是子集指向父集&#xff1b;而extend是扩展用例指向基础用例&#xff08;基础用例可以理解为系统核心功能&#xff0c;扩展用例是可选的&#xff0c;不是必须…

SpringBoot自定义注解+反射实现 excel 导入的数据组装及字段校验

在前段时间的开发工作中&#xff0c;接手了一个很简单&#xff0c;很普通的开发任务。 要求实现一个单表的基础数据的批量导入功能。 评估下来&#xff0c;用户每次批量导入的数据量也就几千条&#xff0c;也不大。 是不是很简单&#xff0c;没有骗你们吧。但是呢&#xff0…

OJ_子串计算

题干 c实现 #include <stdio.h> #include <string> #include <map>using namespace std;int main() {char strArr[100];while (scanf("%s", strArr) ! EOF) {string str strArr;map<string, int> subCount;for (int i 0; i < str.size…

【[STM32]标准库-自定义BootLoader】

[STM32]标准库-自定义BootLoader BootloaderBootloader的实现BOOTloader工程APP工程 Bootloader bootloader其实就是一段启动程序&#xff0c;它在芯片启动的时候最先被执行&#xff0c;可以用来做一些硬件的初始化或者用作固件热更新&#xff0c;当初始化完成之后跳转到对应的…

C++基础2:C++基本数据类型和控制结构

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 2.C基本数据类型和控制结构 2.1 C基本数据类型 程序是由算法…

这回就好好聊聊Kotlin的泛型

公众号「稀有猿诉」 原文链接 这回就好好聊聊Kotlin的泛型 泛型(Generics)是静态强类型编程语言中非常强大的特性&#xff0c;可以极大的加强代码的复用&#xff0c;并增强类型安全&#xff0c;减少运行时的类型转换错误。在这篇文章就来详细的学习一下Kotlin中对泛型的…

080|为什么阿里的价值观值得你关注?

在阿里巴巴20周年年会现场&#xff0c;万众瞩目之下&#xff0c;马云和张勇完成了阿里巴巴董事长职务的交接。 不过你也知道&#xff0c;这次接棒在一年前就已经公布了&#xff0c;在年会上只是一个仪式。在20周年年会过后&#xff0c;我找到了互联网圈的资深媒体人阳淼&#…

Mathcad tips_table相关

1. 可以插入表格&#xff0c;或者2. 从excel 文件导入 选择列 选择其中一行的数值

408专业课130+|我的备考经验和复盘

408的四门课任务量多到爆炸&#xff01;但难度不止于此。别忘了大部分选计算机的勇士们&#xff0c;是要考数学的&#xff01;直接起飞。 408数学无疑是王炸王炸&#xff0c;要想上岸就一定要把这两个大头一起拿下&#xff01; 作为一个成功上岸的非计算机专业跨考生&#xf…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

16 PyTorch 神经网络基础【李沐动手学深度学习v2】

要想直观地了解块是如何工作的&#xff0c;最简单的方法就是自己实现一个。 在实现我们自定义块之前&#xff0c;我们简要总结一下每个块必须提供的基本功能。 将输入数据作为其前向传播函数的参数。 通过前向传播函数来生成输出。请注意&#xff0c;输出的形状可能与输入的形…

leetcode 热题 100_找到字符串中所有字母异位词

题解一&#xff1a; 滑动窗口&#xff1a;类似于字符串匹配&#xff0c;但匹配异位词需要包含相同的字母及个数&#xff0c;可以分别用两个数组存储字符串s滑动窗口和字符串p的字母及个数&#xff0c;再用Array.equals()进行比对。对于s.length()<p.length()的情况需要特判。…

2024 全国水科技大会暨污泥处理处置与资源化利用技术论坛(九)

为大会征集“绿色低碳污水厂案例”&#xff0c;欢迎各相关单位积极报名&#xff01; 一、会议背景 为深入学习贯彻《中共中央、国务院关于全面推进美丽中国建设的意见》&#xff0c;全面贯彻实施《固体废物污染环境防治法》、《“十四五”全国城市基础设施建设规划》&#xff0…

【操作系统概念】 第2章:操作系统结构

文章目录 0. 前言2.1 操作系统的服务2.2 操作系统的用户界面2.3 系统调用&#xff08;System Call&#xff09;2.3.1 系统调用的过程 2.4 系统调用类型2.5 系统程序分类2.6 操作系统设计和实现2.7 操作系统结构2.7.1 简单结构2.7.2 分层方法2.7.3 微内核2.7.4 模块 2.8 操作系统…

IO多路复用:2024/3/5

作业1、使用poll实现tcp服务器端&#xff0c;select实现tcp客户端 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.131" //服务端IP #define SER_PORT 8888 //服务端端口号int main(int argc, const char *argv[])…

【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程

文章目录 一、概述二、MinIO 与 Ceph 对比1&#xff09;架构设计对比2&#xff09;数据一致性对比3&#xff09;部署和管理对比4&#xff09;生态系统和兼容性对比 三、前期准备1&#xff09;部署 docker2&#xff09;部署 docker-compose 四、创建网络五、MinIO 编排部署1&…