湘大 XTU OJ 1291 Buying Gifts 题解(非常详细):枚举 维护最小值 排序

一、链接

1291 Buying Gifts

二、题目

题目描述

快到年末了,Boss Liu准备在年会上发些礼物,由于不想礼物的价格区别太大,Boss Liu希望最好的礼物与最差的礼物价格相差越小越好。 当然,如果存在相同的选择,Boss Liu希望花的钱越少越好
Boss Liu把这个买礼物的任务给你,你决定写个程序来帮助自己计算一下。

输入

第一行是一个整数K,表示样例的个数。
每个样例的第一行是一个整数n,m(1≤m≤n≤1000),分别表示可购买的礼物的个数和实际需要购买的个数
每个样例的第二行是n个整数xi,i=1,2,⋯,n(1≤xi≤100),表示n个礼物的价格

输出

每个样例输出两个整数,分别表示最小的价差以及总的花费,中间用一个空格隔开。

样例输入

2
5 3 
10 5 9 7 2 
5 1 
10 5 9 7 2

样例输出

3 26 
0 2

线索

第一个样例,购买10,9,7的礼物的差值最小为3,总花费是26。
第二个样例,因为只买一样所以差值都是0,最小花费是2。

三、题意

输入可供选择的商品,选择一定的商品,保证选择的商品可以使得价差最小,在价差相等的情况下,总金额越小越好,输出最小的价差和总的金额

四、代码

c++代码

#include<iostream>
#include<algorithm>

using namespace std;

const int N=1000+10;

int gap,temp=110,ans,sum;

int q[N];

int main()
{
	int t;
	scanf("%d",&t);
	
	while(t--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		
		for(int i=0;i<a;i++)	scanf("%d",&q[i]);
		
		sort(q,q+a);
		
		//10 5 9 7 2 
		//2 5 7 9 10
		for(int i=0;i+b-1<a;i++)
		{
			gap=q[i+b-1]-q[i];
			
			if(gap<temp)
			{
				temp=gap;
				ans=i;
			}
		}
		
		for(int i=ans;i<ans+b;i++)	sum+=q[i];
		
		printf("%d %d\n",temp,sum);
		
		ans=0,sum=0,gap=0,temp=110;
	}
	
	return 0;
}

c语言代码

#include<stdio.h>

int q[1000+10],ans,gap,temp=110,sum;

int main()
{
	int t;
	scanf("%d",&t);
	
	while(t--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		
		for(int i=0;i<a;i++)	scanf("%d",&q[i]);
		
		for(int i=0;i<a;i++)
		{
			for(int j=i;j<a;j++)
			{
				if(q[i]>q[j])
				{
					int k=q[i];
					q[i]=q[j];
					q[j]=k;
				}
			}
		}
		
		for(int i=0;i+b-1<a;i++)
		{
			gap=q[i+b-1]-q[i];
			
			if(gap<temp)
			{
				temp=gap;
				ans=i;
			}
		}
		
		for(int i=ans;i<ans+b;i++)	sum+=q[i];
		
		printf("%d %d\n",temp,sum);
		
		gap=0,temp=110,ans=0,sum=0;
	}
	
	return 0;
}

五、总结

1.首先把输入的数字进行一个升序排序,c++直接调用库函数,c语言直接手写一个冒泡排序

算是常见的模板,排序相关可以参考这一篇:湘大 XTU OJ 1097 排序 题解:c++ 函数库的使用 快速排序 归并排序 冒泡排序

2.思路类似于滑动窗口,我们只需要看固定窗口内的几个元素(也就是我们要买的礼物个数) 

单调队列-求一定范围内的最大值和最小值

像是这一个题目的朴素做法 

3.根据样例简单模拟一下:有五个商品可供选择,我们只需要买3个礼物,刚开始是

10,5,9,7,2

4.排序之后是

2,5,7,9,10

5.每一次看三个元素

2,5,7,9,10

2,5,7,9,10

2,5,7,9,10

维护每一次黄色区域的最大值和最小值的差值,第一个是5,第二个是4,第三个是3,所以答案就是3,然后输出第三个黄色区域的和

6.题目要求在最大值与最小值差值最小的情况下,如果两组数据最小的差值相等,输出总钱数最小的那个答案,也就是输出黄色区域总和最小的答案,使用这一行代码即可实现

if(gap<temp)
{
	temp=gap;
	ans=i;
}

也就是说不取等号,这样的话,就会自然取左边的黄色区域,因为已经按照升序排序,所以左边的黄色区域的总和更小 

7.有一个地方容易绕晕:从1开始数到n是n个数字,从0开始数到n-1是n个数字

8.最后不要忘记重置所有变量,因为每一个样例输入,答案都会发生改变

9.最大的价差不会超过99,所以把temp初始化为110,可以保证任何情况下,temp都至少被更新一次,任何一个价差都小于temp的初始值

六、精美图片

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

现代C++中的从头开始深度学习【1/8】:基础知识

一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch&#xff0c;在于它们的可扩展性和灵活性。也就是说&#xff0c;花时间从头开始编码机器学习算法似乎违反直觉&#xff0c;即没有任何基本框架。然而&#xff0c;事实并非…

SQLServer 实现数据库表复制到另一个数据库_kaic

SQLServer 实现数据库表复制到另一个数据库 一、如果两个数据库在同一台服务器上 1、复制表结构和数据(A->B)&#xff1a; SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA 2、仅仅复制表结构(A->B)&#xff1a; SELECT * INTO DatabaseB.dbo.TableB …

【讯飞星火认知大模型】大模型之星火手机助理

目录 1. 讯飞星火认知大模型介绍 2. API 申请 3. 星火手机助理 4. 效果展示 1. 讯飞星火认知大模型介绍 讯飞星火认知大模型是科大讯飞自研的基于深度学习的自然语言处理模型&#xff0c;它可以理解和生成中文&#xff0c;执行多种任务&#xff0c;如问答、翻译、写作、编…

什么是媒体代发布?媒体代发布注意事项

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体代发布是指将新闻稿或其他宣传内容委托给专业的媒体代理机构或公司进行发布和推广的活动。这些机构通常拥有丰富的媒体资源、人脉和经验&#xff0c;能够更好地将信息传递给目标受众…

PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串

/*** 获取两字符串所有公共子序列【不连续的】 例&#xff1a;abc ac > ac** param string $str1 字符串1* param string $str2 字符串2** return array*/ function public_sequence(string $str1, string $str2): array {$data [[-1, -1, , 0, ]]; // 子序列容器【横坐标 …

【分布式系统】聊聊高性能设计

每个程序员都应该知道的数字 高性能 对于以上的数字&#xff0c;其实每个程序员都应该了解&#xff0c;因为只有了解这些基本的数字&#xff0c;才能知道对于CPU、内存、磁盘、网络之间数据读写的时间。1000ms 1S。毫秒->微秒->纳秒-秒->分钟 为什么高性能如此重要的…

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS &#xff1b;需要设置快捷键&#xff0c;这里原来是save all操作时上传文件到服务器&#xff1b; ** 设置好快捷键后按 CtrlS就会同步文件&#xff08;添加删除文件后保存&#xff0c;服务器也会同步&#xff09; ** 搜索出save all 后&#xf…

安科瑞物联网表在虚拟电厂的应用

安科瑞 崔丽洁 应用场景 一般应用于控制中心 功能 能计量当前组合有功电能&#xff0c;正向有功电能&#xff0c;反向有功电能&#xff0c;正向无功电能&#xff0c;反向无功电能&#xff1b; ADW300支持RS485通讯、LORA通讯、NB、4G及Wifi通讯&#xff1b; 三套时段表,一年可以…

linux_常用命令

一、日常使用命令/常用快捷键命令 开关机命令 1、shutdown –h now&#xff1a;立刻进行关机 2、shutdown –r now&#xff1a;现在重新启动计算机 3、reboot&#xff1a;现在重新启动计算机 4、su -&#xff1a;切换用户&#xff1b;passwd&#xff1a;修改用户密码 5、logou…

⌈算法进阶⌋图论::并查集——快速理解到熟练运用

目录 一、原理 1. 初始化Init 2. 查询 find 3. 合并 union 二、代码模板 三、练习 1、 990.等式方程的可满足性&#x1f7e2; 2、 1061. 按字典序排列最小的等效字符串&#x1f7e2; 3、721.账户合并 &#x1f7e1; 4、 839.相似字符串组&#x1f7e1; 5、 2812.找出最安全…

【小程序】Canvas 画布分享海报

成品效果图 可以通过切换下面图片形成不同的海报背景分享图 <template><view>// type"2d"必须加<canvas type"2d" :style"{width:Artwidth px,height:Artheight px, margin:0 auto}" canvas-id"firstCanvas"id&quo…

uniapp调查问卷评价功能

我本来用的是uniapp官方提供的组件uni-rate组件&#xff0c;但修改成我想要的样式有点麻烦&#xff0c;于是我就自己手写一个&#xff0c;比用组件简单一点&#xff1b; dom结构 <text class"formTit must">请您对本次活动进行评价</text> <view cl…

【C语言】小游戏-三字棋

大家好&#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明&#xff0c;整个代码要引用的头文件以及宏…

探索未来:直播实时美颜SDK在增强现实(AR)直播中的前景

在AR直播中&#xff0c;观众可以与虚拟元素实时互动&#xff0c;为用户带来更加丰富、沉浸式的体验。那么&#xff0c;直播美颜SDK在AR中有哪些应用呢&#xff1f;下文小编将于大家一同探讨美颜SDK与AR有哪些关联。 一、AR直播与直播实时美颜SDK的结合 增强现实技术在直播中…

AtcoderABC222场

A - Four DigitsA - Four Digits 题目大意 给定一个整数N&#xff0c;其范围在0到9999之间&#xff08;包含边界&#xff09;。在将N转换为四位数的字符串后&#xff0c;输出它。如果N的位数不足四位&#xff0c;则在前面添加必要数量的零。 思路分析 可以使用输出流的格式设…

数据结构刷题训练——链表篇(三)

目录 文章目录 前言 1. 题目一&#xff1a;环形链表Ⅱ 1.1 思路 1.2 分析 1.3 题解 1.4 方法二 2. 题目二&#xff1a;复制带随机指针的链表 2.1 思路 2.2 分析 2.3 题解 总结 前言 在这个专栏博客中&#xff0c;我们将提供丰富的题目资源和解题思路&#xff0c;帮助读者逐步提…

Java多线程(2)---线程控制和线程安全的详细讲解

目录 前言 一.线程控制方法 1.1启动线程--start() 1.2线程睡眠---sleep()方法 1.3中断线程--interrupt() 方法 1.4等待线程---join() 二.线程安全 2.1数据不安全---数据共享 ⭐不安全的演示和原因 ⭐不安全的处理方法 ⭐synchronized的使用 2.2数据不安全---内存可…

数据结构刷题训练:用栈实现队列(力扣OJ)

目录 前言 1. 题目&#xff1a;用栈实现队列 2. 思路 3. 分析 3.1 定义 “ 队列 ” 3.2 创建队列 3.3 入队 3.4 队头数据 3.5 出队 3.6 判空和销毁 4.题解 总结 前言 栈和队列是数据结构中的两个重要概念&#xff0c;它们在算法和程序设计中都有着广泛的应用。本文将带你深入了…

4.时间与窗口

4.1 时间类型 在Flink中定义了3种时间类型&#xff1a; 事件时间&#xff08;Event Time&#xff09;:事件的发生事件&#xff0c;数据本身自带时间字段。处理时间&#xff08;Processing Time&#xff09;&#xff1a;计算引擎处理时的系统时间。和摄取时间&#xff08;Inge…

(el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

Ⅰ、Element-plus 提供的 Form 表单组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Form 表单组件情况&#xff1a; 其一、Element-plus 自提供的 Form 代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环…