蓝桥杯每日一练——搬走要石(二分法) python

蓝桥杯每日一练之 基数排序 基数排序是基于桶排序的思想,它将整数按位数切割成不同的数字,然后按每个位数分别进行排序。具体来说,它从最低位开始,依次对每一位数字进行排序,直到最高位排序完成。在每一轮排序中,会根据当前位的数字将元素分配到不同的桶中,然后再按照桶的顺序依次收集元素,这样经过若干轮后,数据就会完全有序。用基数排序对有限数进行排序。 阅读详情

问题描述
  住在有顶天的天人Tensi对自己的住处很不满。终于有一天她决定把门前碍眼的要石通通丢掉(怒扔要石)。控制要石自然是很容易的事,不过也会消耗灵力。假设搬走一块质量为1的要石会消耗1点灵力,而且由于要石都是连着放置的缘故所以每次除了搬走一颗,也可以搬走连续的任意数量的要石,自然质量是算在一起的。现在Tensi准备最多使用M次灵力,但是她太懒……所以每次只会使用同量的灵力,也因为她太烂,所以也不愿意多花一点灵力……现在很懒的Tensi需要你帮她计算最少一次需要消耗多少灵力,能够在M次内把所有要石都丢到人间去……
输入格式
  第一行两个数N,M,用一个空格分隔。1<=n<=1000,1<=m<=400
  表示一共有N颗要石需要搬走已经Tensi最多发动M次灵力。   接下来包括N 个正整数 0<=ai<=40000
  顺序表示每一颗要石的质量。
输出格式   
   输出一个数T   
  表示Tensi 每次至少消耗T灵力。0<=T<=1000000
  如果无解输出-1.
样例输入
5 3
1 2 1 1 1
样例输出
3
数据规模和约定
  对于100%的数据,1<=n<=1000,1<=m<=400,0<=ai<=40000。   
  保证0<=T<=1000000。

def fun(x):
    count = 1
    sum = 0
    i = 0
    while i < len(stone):   # 用i循环来捡石头
        sum += stone[i]     # 捡起一块石头
        # 如果这是最后一块石头,并且捡的起来(力气够),那就返回真
        if i == len(stone) - 1 and sum <= x:  
            return True
        if sum > x:         # 如果sum > x,也就是力气不够
            sum = 0         # 那就只能把前面的先扔下去了
            count += 1      # 次数+1
            i -= 1          # 既然力气不够,第i块只能重新捡起来,i-1就是把i循环退回到捡不起来的那颗
        elif sum == x:      # 如果力气刚好够
            sum = 0         # 那就把手上的都扔下去
            count += 1      # 次数+1
        if count > m:       # 次数超了
            return False    # 返回假
        # if count == m and i != len(stone) - 1:
        #     return False
        i += 1              # i循环日常 +1


n, m = map(int, input().split())
stone = list(map(int, input().split()))
l = 0         # 左
# 题意可知,答案 不能小于 所有石头重量/次数,再小就完不成任务
for i in stone:
    l += i
l //= m
# 二分法的精髓就是 左和右不断缩小,直到相同
r = 1000000   # 右
min = 0       # 答案
# 开始!
while l < r:
    mid = (l + r) // 2  # 二分法常规操作  取中间数
    if fun(mid):        #判断是否能搬完石头
        r = mid - 1     # 可以的话,右缩小
        min = mid       # 把这个可以的值赋值给min
    else:
        l = mid + 1     # 不行就左边缩小咯
if min == 0:            # 根据题意,min=0  就是没有解,输出-1
    print(-1)
# 这个算法很奇怪(应该是我写的有问题),右的值不一样会出现计算出来的结果不一样,
#有时候会比答案高1,所以用这个蠢办法,测试-1成不成立
elif fun(min - 1):      
    print(min - 1)
else:
    print(min)

看完代码,可能你会问我,为什么不用for循环,因为用不了啊,for循环是不能在循环里边改变i的值的,就算变了,也只是这次循环变了,下次循环还是那个数,所以这里只能用while循环

这道题会有一个误导,每次只会使用同量的灵力,会让考生误以为每一次都必须使用这么多的灵力,少一点都不行,但其实只是不能多于这个数而已,
比如:
5 3
16 14 13 15 10
答案:27
分成三次拿取:16 (14+13) (15+10)
三次都不会高于27,所以答案为27

下面是我一开始以为必须每次使用相同的灵力写的代码:

    count = 0
    for i in range(len(stone)):
        count += stone[i]
        if count == x:
            count = 0
        if count > x:
            return False
        if i == len(stone) - 1 and count != 0:
            return False
        if i == len(stone) - 1 and count == 0:
            return True
n,m = map(int,input().split())
stone = list(map(int,input().split()))
l = 0
for i in stone:
    l += i
l //= m
while l < 10000:
    if fun(l):
        print(l)
        break
    l += 1
蓝桥杯python真题——每日一练 首先读取输入的考试人数,然后使用循环读取每个学生的得分并统计及格人数和优秀人数。题目:小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到 100 的整数。以上就是有关蓝桥杯python组真题之一:成绩统计的详细解题过程和详细代码,大家有什么问题或者想要分享的也欢迎在评论区提出来!输出描述:输出两行,每行一个百分数,分别表示及格率和优秀率。请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。接下来几 行,每行包含一个0至 100 的整数,表示一个学生的得分。 阅读详情

相关推荐

蓝桥杯——每日一练(简单题)

输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。配合range()函数进行遍历,将整数变成字符串在再用切片操作判断正反数是否相等。123321是一个非常特殊的数,它从左边读和从右边读是一样的。按从小到大的顺序输出满足条件的整数,每个整数占一行。三、将字符串进行遍历并用sum()函数进行求和。一、input()函数获得各位数之和。输入一行,包含一个正整数n。

2301_79876491的博客 9688

蓝桥杯算法训练——搬走要石

蓝桥杯——算法训练 问题描述:   住在有顶天的天人Tensi对自己的住处很不满。终于有一天她决定把门前碍眼的要石通通丢掉(怒扔要石)。控制要石自然是很容易的事,不过也会消耗灵力。假设搬走一块质量为1的要石会消耗1点灵力,而且由于要石都是连着放置的缘故所以每次除了搬走一颗,也可以搬走连续的任意数量的要石,自然质量是算在一起的。现在Tensi准备最多使用M次灵力,但是她太懒……所以每次只会使用同量的灵力, 也因为她太烂,所以也不愿意多花一点灵力……现在很懒的Tensi需要你帮她计算最少一次需要消耗多少灵力,能

kimitoLMT的博客 1390

蓝桥杯每日一练之使用栈解决迷宫问题(深度搜索)

maze = [dirs = [迷宫矩阵maze:这是一个二维列表,用来表示迷宫的布局。其中,0代表该位置是通路,1代表该位置是墙壁,不能通行。方向函数列表dirs:这是一个包含四个匿名函数(lambda函数)的列表,每个函数代表一个移动方向。:表示向左移动,即横坐标x不变,纵坐标y减 1。:表示向下移动,即横坐标x加 1,纵坐标y不变。:表示向右移动,即横坐标x不变,纵坐标y加 1。:表示向上移动,即横坐标x减 1,纵坐标y不变。

ylccccc1的博客 920

374. 猜数字大小

猜数字游戏的规则如下: 每轮游戏,我都会从1到n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。 你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1或 0): -1:我选出的数字比你猜的数字小 pick < num 1:我选出的数字比你猜的数字大 pick > num 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == nu...

syh's BF的博客 384

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 325

电磁场数值分析作业(西电)共5次【2021】

文章目录作业1作业2作业3作业4作业5 作业1 一个二维正方形(边长a=10mm)的静电场区域,电位边界条件如图所示(单位:V),求区域内的电位分布。要求用超松弛迭代法求解差分方程组进行计算。 clc clear close all hx=11; hy=11; v1=zeros(hy,hx); v1(hy,:)=ones(1,hx)*100; v1(1,:)=ones(1,hx)*50; for i=1:hy v1(i,1)=0; v1(i,hx)=100; end w=2/(1+

薛定谔的壳的博客 5074

蓝桥杯2022年第十三届决赛真题-分石头(Python组)C++方法(sg函数加线性筛筛质数)

输出 T 行,每行包含一个整数 0 或 1,表示对应询问的答案。如果小蓝存在必胜策略,输出 1,否则输出 0。对于所有评测用例,1 ≤T≤1e5 ,1≤ ni ,∑ ni ≤ 1e5 ,每堆石子数量不超过 1e6。请问小蓝是否存在必胜策略,即是不是存在一种策略,使得不论小乔如何操作,小蓝总有办法获得胜利。对于 20% 的评测用例,T = 1 ,ni ≤ 10 ,每堆石子数量不超过 1000;第二行包含 n 个正整数,相邻两个整数之间用一个空格分隔,依次表示每堆石子的个数。输入包含多组独立的询问。

weixin_62770773的博客 974

STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

STM32使用内部RC振荡器时,OSC32_IN,OSC32_OUT接法: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法:    2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。    2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出

overflyme的博客 1万+

试题 算法训练 搬走要石(蓝桥杯C++)

试题 算法训练 搬走要石(蓝桥杯C++)资源限制问题描述输入输出格式如何改变文本的样式数据规模和约定解题(使用C++解题) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 **   住在有顶天的天人Tensi对自己的住处很不满。终于有一天她决定把门前碍眼的要石通通丢掉(怒扔要石)。控制要石自然是很容易的事,不过也会消耗灵力。假设搬走一块质量为1的要石会消耗1点灵力,而且由于要石都是连着放置的缘故所以每次除了搬走一颗,也可以搬走连续的任意数量的要石,自然质量是算在一起的。现在Tensi准

qq_46704948的博客 1575

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3260

用 SemanticObject 把字段变成可点击链接:Fiori Elements Navigation Using a Link 的工程化实践

SAP Fiori elements 通过 Common.SemanticObject 注解可将字段转为可点击链接,实现应用间跳转。当源字段名与目标属性名不一致时,需使用 Common.SemanticObjectMapping 进行映射。该功能依赖 Fiori Launchpad 的目标映射配置,确保正确解析 semantic object + action 并传递参数。常见误区包括未配置目标映射或字段映射错误,需逐一检查语义标注、intent 解析和参数传递链路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

【蓝桥杯】关于python 跳石头题目的思考

二分的理解

Mr_king138的博客 573

YOLOv8改进 | 主干网络 | 在backbone添加Swin-Transformer层【论文必备】

YOLOv8改进,Swin-Transform,YOLOv8添加Swin-Transform

kay_545 2367

Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现

大一在读 大数据管理与应用专业 欢迎交流 备战蓝桥杯 倒计时70天 目前主要学习Python算法与数据结构 算法人算法魂 算法题让我们敢于挑战自己做意想不到的事情 快来试试今天的每日一练吧 Python小伙伴 问题描述: 来感受一下Python的简洁:遍历法(比较慢) class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: ...

m0_62277756的博客 1167

单反相机物镜设计[DG-10]

REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。

weixin_72050316的博客 600

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

每日一练-i,j序列

python例题:给你一个长度为n的序列,请输出满足以下条件的(i,j)的数量

小 y 同 学的博客 1689

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

每日一练-最大x

你有n元的预算和一个正整数x,初值为0。你可以选择一个整数i(1≤i≤9),花Ci元令x=10x+i,这个操作可以进行任意次。在预算的允许下,x最大可以是多少。   在预算的允许下,$x$最大可以是多少。

小 y 同 学的博客 1522

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

每日一练-特别数的和

python蓝桥杯真题-特别数的和,数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。

小 y 同 学的博客 622

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝桥杯国赛冲刺:从算法基础到每日一练的系统化路径

算法是计算机科学的核心,它通过一系列明确的指令解决特定问题,其效率由时间与空间复杂度衡量。理解算法原理,如分治、动态规划、贪心等思想,是构建高效程序的基础。掌握数据结构,如数组、链表、哈希表,是算法实现的物理载体。在工程实践中,算法能力直接决定了软件的性能上限与问题解决能力,尤其在数据处理、人工智能、搜索引擎等场景中至关重要。对于参加蓝桥杯等算法竞赛的开发者而言,系统化的知识体系与持续的刻意练习是提升竞争力的关键。本文聚焦于如何通过高效的“每日一练”方法,将算法基础与核心思想应用于竞赛准备,其中涉及对动态规

congsikuai0611的博客 406

PYTHON蓝桥杯——每日一练(简单题)

请求出在 12345678 至 98765432 中,有多少个数中完全不包含 2023。完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023。例如 20322175,33220022 都完全不包含 2023,而 20230415,20193213 则含有 2023 (后者取第 1, 2, 6, 8 个数位)。输入仅包含两行,每行描述一个矩形。在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。输出仅包含一个实数,为,保留到小数后两位。

2301_79876491的博客 2211

蓝桥杯每日一练之 桶排序

桶排序(Bucket Sort)是一种分布式排序算法,它的工作原理是将数组元素分配到有限数量的桶里,每个桶再分别进行排序(可以使用其他排序算法,如插入排序),最后将所有桶中的元素按顺序合并起来,得到最终的排序结果。对已知最大数的列表进行排列。

ylccccc1的博客 476

蓝桥杯每日一练——礼物 python

问题描述   JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友。   在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子。   这些石子很漂亮,JiaoShou决定以此为礼物。   但是这N个石子被施加了一种特殊的魔法。   如果要取走石子,必须按照以下的规则去取。   每次必须取连续的2*K个石子,并且满足前K个石子的重量和小于等于S,后K个石子的重量和小于等于S。   由于时间紧迫,Jiaoshou只能取一次。   现在JiaoShou找到了聪明.

LRY___的博客 1066

蓝桥杯每日一练(python)B组

给定 n, m ,问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x = n mod y。对于第一个数的取模为1,n % i = i - 1 (这是不同数取模的结果) 当 n % i!思路:由于取模运算是取两个数相除的余数,而且在python中 % 与 mod函数 他们输出的结果是相同的。由题目可知,一共有m个数,若是取模时,假设我现在取k个数,前k个数有。k个不同的模,当我们取到第k+1个数时,它应该会有k+1个不同的模给到我们,否则它就有相同的模出现。

2301_80246346的博客 1232

蓝桥杯每日一练——爬楼梯 python

问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 提示: 1 <= n <= 45 来源:力扣(LeetCode) 链接:https://leetcode-cn.co.

LRY___的博客 1366

蓝桥杯每日一练01

压缩字符串。

wander23221的博客 360
上一篇: 蓝桥杯每日一练——分巧克力(二分法) python
下一篇: 蓝桥杯每日一练—— 2^k进制数 python
LRY___
博客等级 码龄6年 1565粉丝 39原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值