【蓝桥杯python研究生组备赛】003 贪心

题目1 股票买卖

给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

输入格式

第一行包含整数 N,表示数组长度。

第二行包含 N 个不大于 10000 的正整数,表示完整的数组。

输出格式

输出一个整数,表示最大利润。

数据范围

1≤N≤105

输入样例1:
6
7 1 5 3 6 4
输出样例1:
7
输入样例2:
5
1 2 3 4 5
输出样例2:
4
输入样例3:
5
7 6 4 3 1
输出样例3:
0
样例解释

样例1:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。共得利润 4+3 = 7。

样例2:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

样例3:在这种情况下, 不进行任何交易, 所以最大利润为 0。

python代码

n=int(input())
data=list(map(int,input().split()))ans=0for i in range(n-1):if data[i+1]>data[i]:ans+=data[i+1]-data[i]print(ans)

知识点

  1. 主要是在于思路:任何多日间的低买高卖,都可以被简化为每两天之间的交易

题目2 货仓选址

在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。

现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。

为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。

输入格式

第一行输入整数 N。

第二行 N 个整数 A1∼AN。

输出格式

输出一个整数,表示距离之和的最小值。

数据范围

1≤N≤100000,
0≤Ai≤40000

输入样例:
4
6 2 9 1
输出样例:
12

python代码

n=int(input())data=list(map(int,input().split()))
ans=0
data.sort()
if n%2==0:#n为偶数,选在中间两个数中间place=data[n//2-1]
else:#n为奇数,选在中位数place=data[n//2]#计算总距离
for i in range(n):ans+=abs(data[i]-place)
print(int(ans))

知识点

  1. 思路问题,首先是无疑是把货仓建在 商店中间
  2. 当n为偶数,放在中间的两个 中的一个
  3. 当n为偶数,放在中间的一个

题目3 糖果传递

有 n 个小朋友坐成一圈,每人有 a[i] 个糖果。

每人只能给左右两人传递糖果。

每人每次传递一个糖果代价为 1。

求使所有人获得均等糖果的最小代价。

输入格式

第一行输入一个正整数 n,表示小朋友的个数。

接下来 n 行,每行一个整数 a[i],表示第 i 个小朋友初始得到的糖果的颗数。

输出格式

输出一个整数,表示最小代价。

数据范围

1≤n≤1000000,
0≤a[i]≤2×10^9,
数据保证一定有解。

输入样例:
4
1
2
5
4
输出样例:
4

python代码

n=int(input())
data=[0]
n1=n
while n1:a=int(input())data.append(a)n1-=1
ave=sum(data)//n
c=[0]*(n+1)for i in range(n):c[i+1]=c[i]+data[i]-ave
# print(c)
ans=0
c=[0]+sorted(c[1:n+1])
# print(c)
for i in range(1,n+1):#下标从1开始ans+=abs(c[i]-c[n//2+1])
print(ans)    

知识点

糖果传递

  1. 图例中的c1与代码中的c1不是一致的
  2. c1-c4均可正可负
  3. 将问题转化为,已知a1,a2,a3,a4,求距离每一个点 最小的距离和,而最优解就是中位数

题目4

假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。

每个小岛都位于海洋一侧的某个点上。

雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d 时,该小岛可以被雷达覆盖。

我们使用笛卡尔坐标系,定义海岸线为 x 轴,海的一侧在 x 轴上方,陆地一侧在 x 轴下方。

现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。

输入格式

第一行输入两个整数 n 和 d,分别代表小岛数目和雷达检测范围。

接下来 n 行,每行输入两个整数,分别代表小岛的 x,y 轴坐标。

同一行数据之间用空格隔开。

输出格式

输出一个整数,代表所需的最小雷达数目,若没有解决方案则所需数目输出 −1。

数据范围

1≤n≤1000,
1≤d≤200,
−1000≤x,y≤1000

输入样例:
3 2
1 2
-3 1
2 1
输出样例:
2

python代码

n,d=map(int,input().split())data=[list(map(int,input().split())) for _ in range(n)]#先计算覆盖每一个小岛对应的线段
from math import sqrt
data.sort(key=lambda x:x[0])#按照横坐标排序line=[]#存储对应的线段for i in range(n):#如果小岛纵坐标已经大于半径,那么直接输出-1if data[i][1]>d:print(-1)exit()elif data[i][1]==d:a,b=data[i][0],data[i][0]line.append([a,b])else:distance=sqrt(d**2-data[i][1]**2)a=data[i][0]-distanceb=data[i][0]+distanceline.append([a,b])line.sort(key=lambda x:x[1])#按照线段右端点排序
ans=0
last=line[0][1]#上一个雷达点for i in range(1,n):if last>=line[i][0]:ans+=0else:last=line[i][1]ans+=1
print(ans)       

知识点

  • 如果以雷达为核心,r为半径的圆,去找覆盖到的小岛,不太容易判断 那么就以小岛为圆心,找到能满足要求的 线段[a,b]
  • 如果小岛纵坐标已经大于半径,那么直接输出-1
  • 按照右端点对区间进行排序,那么如果下一个需求坐标的左端点在 上一个坐标右端点的后面,则需要再放一个雷达,反之,不用放雷达
  1. 排序:line.sort(key=lambda x:(x[1],x[0])):先按照line每一个元素的第二个值进行排序,若第二个值相等,按照这个元素的第一个值进行排序。
line=[[1,2],[3,2],[5,2],[-2,4]]
line.sort(key=lambda x:(x[1],x[0]))
print(line)#[[1, 2], [3, 2], [5, 2], [-2, 4]]

更多蓝桥杯笔记:蓝桥杯备赛笔记

题目5 付账问题

几个人一起出去吃饭是常有的事。

但在结帐的时候,常常会出现一些争执。

现在有 n 个人出去吃饭,他们总共消费了 S 元。

其中第 i 个人带了 ai 元。

幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢?

为了公平起见,我们希望在总付钱量恰好为 S 的前提下,最后每个人付的钱的标准差最小。

这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是 1 分钱的整数倍。

你需要输出最小的标准差是多少。

标准差的介绍:标准差是多个数与它们平均数差值的平方平均数,一般用于刻画这些数之间的“偏差有多大”。

形式化地说,设第 i 个人付的钱为 bi 元,那么标准差为 :

标准差

输入格式

第一行包含两个整数 n、S;

第二行包含 n 个非负整数 a1, …, an。

输出格式

输出最小的标准差,四舍五入保留 4 位小数。

数据范围

1≤n≤5×105,
0≤ai≤109,
0≤S≤1015。

输入样例1:
5 2333
666 666 666 666 666
输出样例1:
0.0000
输入样例2:
10 30
2 1 4 7 4 8 3 6 4 7
输出样例2:
0.7928

python代码

n,s=map(int,input().split())
data=list(map(int,input().split()))sum1=sum(data)
ave=s/nvar=0
data.sort()
i=0
while i<len(data):mean=s/nif data[i]<=mean:#余额小于均值,只能付出全部var+=(data[i]-ave)**2s-=data[i]n-=1i+=1else:#后面的每一个都大于当前均值var+=(mean-ave)**2*nbreak
var=(var/len(data))**0.5print(f'{var:.4f}')

知识点

贪心原则:局部考虑,当前某一个人距离最终均值最小:

  • 余额少于等于剩余的均值,那么付出所有余额
  • 余额大于剩余的均值,那么之后的所有人都大于该均值,每个人付出该均值
  1. 标准化输出:print(f'{var:.4f}'):保留4位小数,浮点型

题目6 乘积最大

给定 N 个整数 A1,A2,…AN。

请你从中选出 K 个数,使其乘积最大。

请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 的余数。

注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%1000000009)

输入格式

第一行包含两个整数 N 和 K。

以下 N 行每行一个整数 Ai。

输出格式

输出一个整数,表示答案。

数据范围

1≤K≤N≤10^5,
−10^5 ≤Ai≤ 10 ^5

输入样例1:
5 3
-100000
-10000
2
100000
10000
输出样例1:
999100009
输入样例2:
5 3
-100000
-100000
-2
-100000
-100000
输出样例2:
-999999829

python代码

n,k=map(int,input().split())data=[int(input()) for _ in range(n)]
mod1=10**9+9def mod(x):if x>0:return x%mod1return -(-x%mod1)data.sort()
flag=1#标记是否全是负数
ans=1if k%2!=0:#奇数个,转化为偶数问题ans*=data[-1]n-=1k-=1if data[-1]<0:#全是负数flag=-1l,r=0,n-1 
while k:ll=data[l]*data[l+1]rr=data[r]*data[r-1]if ll*flag>=rr*flag:ans*=llans=mod(ans)l+=2else:ans*=rrans=mod(ans)r-=2k-=2print(ans)

知识点

蓝桥杯笔记:蓝桥杯备赛笔记

  1. 主要是要考虑到所有的情况,做到不重复,不遗漏
  2. 首先是当n==k,那么就只能所有的数相乘
  3. k为偶数
    • 全正:排序后的数据,从右到左即可
    • 至少存在一个负数,此时k<n,那么就不选这个负数,剩下选择成对的负数or正数,取绝对值最大的
  4. k为奇数
    • 全负:排序后的数据,从左到右即可,结果一定为负
    • 至少存在一个正数,此时k<n,那么就选择这个正数,之后从n-1个数中选择k-1个(负数、正数都成对选),此时k-1为偶数,最终结果一定大于等于0

题目7 后缀表达式

给定 N 个加号、M 个减号以及 N+M+1 个整数 A1,A2,···,AN+M+1,小明想知道在所有由这 N 个加号、M 个减号以及 N+M+1 个整数凑出的合法的后缀表达式中,结果最大的是哪一个?

请你输出这个最大的结果。

例如使用 123+−,则 “23+1−” 这个后缀表达式结果是 4,是最大的。

输入格式

第一行包含两个整数 N 和 M。

第二行包含 N+M+1 个整数 A1,A2,···,AN+M+1。

输出格式

输出一个整数,代表答案。

数据范围

0≤N,M≤105,
−109≤Ai≤109

输入样例:
1 1
1 2 3
输出样例:
4

思路

蓝桥杯笔记:蓝桥杯备赛笔记

很多贪心题目一下子真的很难想出来,怎么办?找规律
首先保证分类情况没有重复没有遗漏

  1. 全是正数
    1 2 3 4 5
  • n=4,m=0:全部相加
  • n=3,m=1:5+4+3+2-1
  • n=2,m=2:5+4+3-(1-2)
  • n=1,m=3:5+4-(1-2-3)
  • n=0,m=4:2-(1-5-4-3)
  1. 全是负数
    -5 -4 -3 -2 -1
  • n=4,m=0:全部相加
  • n=3,m=1:(-1)-{(-5)+(-4)+(-3)+(-2)}
  • n=2,m=2:(-1)-{(-5)+(-4)+(-3)}-(-2)
  • n=1,m=3:(-1)-{(-5)+(-4)}-(-3)-(-2)
  • n=0,m=4:(-1)-(-5)-(-4)-(-3)-(-2)
  1. 有正有负
    -5 -4 -3 2 1
  • n=4,m=0:全部相加
  • n=3,m=1:(1)-{(-5)+(-4)+(-3)+(2)}
  • n=2,m=2:(1)-{(-5)+(-4)}-(-3)+(2)
  • n=1,m=3:(1)-{(-5)}-(-4)-(-3)+2
  • n=0,m=4:(1)-(-5)-(-4)-(-3)-(-2)

不知道你找到规律没?关键在于 减号的数量

  • 减号数量为0,所有元素相加
  • 减号数量不为0,列表中最大元素-最小元素+其余每一个元素的绝对值
import os
import sys
n,m=map(int,input().split())
data=list(map(int,input().split()))
data.sort()
ans=0
if m==0:#一个负号都不存在ans=sum(data)
else:#至少存在一个负号ans=data[-1]-data[0]for i in range(1,len(data)-1):ans+=abs(data[i])
print(ans)

题目8 社区服务

问题描述

为了庆祝妇女节,社区组织了一场“温暖传递”活动。社区中有 n n n 个服务点排成一列,每个服务点可能有志愿者(用 1 表示)或暂时无人(用 0 表示)。

每个服务点都有居民需要帮助,现在你需要从左往右,为每个无志愿者服务点计算距离最近的有志愿者服务点的距离,若不存在则输出 − 1 -1 1

输入格式

第一行输入一个整数 n n n 1 ≤ n ≤ 5000 1 \leq n \leq 5000 1n5000),表示服务点数量。

第二行输入一个长度为 n n n 的二进制字符串 S S S1 表示当前服务点有志愿者,0 表示当前服务点无志愿者。

数据保证 S S S 至少包含 1 1 10

输出格式

输出一行若干个整数,表示每个无志愿者服务点到有志愿者服务点的最近距离,若不存在则输出 − 1 -1 1

样例输入

7 
1010100

样例输出

1 1 1 2

思路

一开始以为全是0,比如000,输出一个“-1”,后来才知道正确答案是“-1 -1 -1”

记录1的下标 对于每一个0,遍历1的下标,更新1到0 的距离的最小值 如果最终这个最小值 找到了,就放进答案列表ans中 没有找到这个最小值,即全是0的情况,把-1放进列表

python代码

n=int(input())
data=list(map(int,input()))list_1=[]#存1的下标
for i in range(n):if data[i]==1:list_1.append(i)
ans=[]for i in range(n):ans1=nif data[i]==0:for j in list_1:ans1=min(ans1,abs(j-i))if ans1!=n:ans.append(ans)else:ans.append(-1)print(*ans,sep=' ')

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

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

相关文章

mmdet3d.models.utils的clip_sigmoid理解

Sigmoid 函数 标准的 sigmoid 函数定义为&#xff1a; 容易得出结论&#xff1a; 取值范围(0, 1) clip_sigmoid 是在标准的 sigmoid 函数基础上进行 裁剪&#xff08;clip&#xff09;&#xff0c;即对 sigmoid 输出的结果加以限制&#xff0c;避免其超出特定范围。 import …

侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)

侯捷 C 课程学习笔记&#xff1a;进阶语法之lambda表达式&#xff08;二&#xff09; 一、捕获范围界定 1. 局部变量与函数参数 ​非静态局部变量&#xff1a;Lambda 所在作用域内定义的局部变量&#xff08;如函数内部的 int x&#xff09;会被完整复制其当前值。捕获后外部变…

有必要使用 Oracle 向量数据库吗?

向量数据库最主要的特点是让传统的只能基于具体值/关键字的数据检索&#xff0c;进化到了可以直接基于语义的数据检索。这在AI时代至关重要&#xff01; 回到标题问题&#xff1a;是否有必要使用 Oracle 向量数据库&#xff1f; 这实际还要取决于你的具体应用需求。 客观来讲…

论文解读 | AAAI'25 CoRA:基于大型语言模型权重的协作信息感知用于推荐

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 个人信息 作者&#xff1a;刘禹廷&#xff0c;东北大学博士生 内容简介 将协作信息融入大型语言模型&#xff08;LLMs&#xff09;是一种有前景的适应推荐任务的技…

es扩容节点以后写入数据量增加1倍

背景&#xff1a; es扩容一倍的数据节点以后 写入数据量增加1倍 业务反馈业务访问量没增加。 最后定位是监控数据&#xff1a; PUT _cluster/settings {"persistent": {"xpack.monitoring.collection.enabled" : "false"} }这个索引记录的是 节…

G-Star 公益行 | 温暖相约 3.30 上海「开源×AI 赋能公益」Meetup

你是否曾想过&#xff0c;在这个数字化浪潮席卷的时代&#xff0c;公益组织如何突破技术瓶颈&#xff1f;当 AI 成为热门话题&#xff0c;它能为公益事业带来怎样的温度&#xff1f;开源的力量&#xff0c;如何让每一份善意都拥有无限可能&#xff1f; G-Star 公益行&#xff…

MySQL数据库复杂的增删改查操作

在前面的文章中&#xff0c;我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子&#xff0c;进行讲解一些较为复杂且现时需求的例子。 基础知识&#xff1a; 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…

kafka-docker版

Kafka-docker版 1 概述 1.1 定义 Kafka传统定义&#xff1a; Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQucue)&#xff0c;主要应用于大数据实时处理领域。它是一个开源的分布式事件流平台( Event Streaming Platform)&#xff0c;被数千家公司用于高性能数据…

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​ 基于Zabbix 官方的Alma Linux 8 作为基础镜像。 镜像源都改为国内大学镜像站&#xff0c;自动联网安装ZabbixGrafana。 安装中文字体、Zabbix和Grafana也配置默认中文。 Zabbix 也指定中文字体&#xff0c;绘图无乱码。 配置时区为东八区&#xff0c;Zabbix配置We…

使用pip在Windows机器上安装Open Webui,配合Ollama调用本地大模型

之前的文章分享过在 linux 服务器上安装&#xff0c;并使用Open-webui 来实现从页面上访问本地大模型的访问。也写了文章分享了我在家里 Windows Server 台式机上安装 Ollama 部署本地大模型&#xff0c;并分别使用 Chatbox 和 CherryStudio 来访问本地的大模型。今天我来分享一…

【python运行Janus-Pro-1B文生图功能】

前言 体验了一把本地部署Janus-Pro-1B实现文生图功能。 1、开源项目下载 官方开源项目代码直接从Github上下载。 2、模型下载 模型官方下载需要魔法 Janus-Pro-1B模型文件&#xff1a;Janus-Pro-1B模型文件 百度网盘&#xff1a; https://pan.baidu.com/s/16t4H4z-QZe2UDAg4…

18 | 实现简洁架构的 Handler 层

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课&#xff1b;欢迎加入 云原生 AI 实战 星球&#xff0c;12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;&#xff1b;本节课最终…

宇树ROS1开源模型在ROS2中Gazebo中仿真

以GO1为例 1. CMakelists.txt更新语法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…

LearnOpenGL-笔记-其三

在之前的章节中我们学习了基本的窗口构建方法、着色器的定义与使用以及摄像机的构建&#xff0c;而从今天这个大章节开始我们要来学习光照有关的知识。 颜色 现实世界中有无数种颜色&#xff0c;每一个物体都有它们自己的颜色。我们需要使用&#xff08;有限的&#xff09;数…

cfi网络安全 网络安全hcip

目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1&#xff0c;周期更新计时器 2&#xff0c;失效计时器 3&#xff0c;垃圾回收计时器 RIP的核心思…

RabbitMQ从入门到实战-2

文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机&#xff08;IDEA中&#xff09;基于Bean声明队列和交换机基于注解声明&#xff08;推&#xff09; 消息转换器配置Json消息转换器 业务改造&#…

《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

可编辑PPT解析数字化转型是什么意思,传统企业的数字化、数字转型数字化变革之路

《传统企业数字化转型之路》是一份43页的PPT&#xff0c;主要探讨了传统企业在数字化转型过程中面临的挑战和解决方案。文档从竞品分析、竞标分析、整体环境、客户需求、品牌效应、市场份额、技术架构和部门效率等方面进行了详细讨论&#xff0c;指出如果企业在这些方面都存在问…

Pytorch系列教程:可视化Pytorch模型训练过程

深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解&#xff0c;使我们能够做出合理的决策。训练进度必须可视化的两种方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…

5.1 程序调试

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 本节中为了演示方便&#xff0c;使用的代码如下&#xff1a; 【例 5.1】【项目&#xff1a;code5-001】程序的调试。 static void Ma…