当前位置: 首页 > news >正文

[HNOI2002] 营业额统计 STL - set集合

文章目录

  • [HNOI2002] 营业额统计
    • 题目描述
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 题解
    • 相关知识点
        • set

[HNOI2002] 营业额统计

STL - set解题

题目描述

Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。

Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:当最小波动值越大时,就说明营业情况越不稳定。

而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助 Tiger 来计算这一个值。

我们定义,一天的最小波动值 = min ⁡ { ∣ 该天以前某一天的营业额 − 该天营业额 ∣ } \min\{|\text{该天以前某一天的营业额}-\text{该天营业额}|\} min{该天以前某一天的营业额该天营业额}

特别地,第一天的最小波动值为第一天的营业额。

样例输入 #1

6
5
1
2
5
4
6

样例输出 #1

12

提示

结果说明: 5 + ∣ 1 − 5 ∣ + ∣ 2 − 1 ∣ + ∣ 5 − 5 ∣ + ∣ 4 − 5 ∣ + ∣ 6 − 5 ∣ = 5 + 4 + 1 + 0 + 1 + 1 = 12 5+|1-5|+|2-1|+|5-5|+|4-5|+|6-5|=5+4+1+0+1+1=12 5+∣15∣+∣21∣+∣55∣+∣45∣+∣65∣=5+4+1+0+1+1=12

题解

题意

统计最小的差值和,要每天的波动的差值最小,即 min = 最相近的一个数-当前值 例如 1 2 3 5 8 中 第三天的最小值min = abs(2-3) = 1

数据约束

数据在Int范围内

思路

  1. 由分析看得出,需要排序所有的数,然后取相近的-左右两边的数分别求差值 再求最小值
  2. 如果按照常规的数据处理,数组排序,然后在前后遍历显然很麻烦,只是处理找数据,所以考虑容器。set map都能自动排序,显然选set
  3. 从样例可以看得出来,数据不能做去重处理,所以直接使用mutiset即可

参考代码

#include <bits/stdc++.h>
using namespace std;
multiset<int> s;//数据存放在一个集合中 
int main() {int n,ans=0;int minn=1e10,maxx=1e10,k;cin>>n;for(int i=0;i<n;i++){minn=1e10,maxx=1e10;//每次都初始化一下 cin>>k;s.insert(k);
//		multiset<int> ::iterator it;
//		for(it=s.begin();it!=s.end();it++){
//			cout<<*it<<" ";
//		}
//		cout<<endl;if(i==0){ans += k;}else{multiset<int> ::iterator ad;ad = s.find(k);ad++;
//			if((ad++)!=s.end()){ //不是最后一个if(ad!=s.end()){ //不是最后一个maxx  = abs(*ad - k);ad--;}else{ad--;}//处理前一个if(ad!=s.begin()){ad--;minn  = abs(*ad - k) ;}ans += min(maxx,minn);}}cout<<ans;}

相关知识点

set

特点

  • 无重复元素:不允许存储重复的元素。
  • 有序存储:元素按某种规则(通常是升序)自动排序。
  • 查找高效:可以高效查找某个元素是否存在。

例子
想象你在一副扑克牌中找一张牌,牌面上没有重复的牌。如果你想找某张牌,只需按顺序查找,而不需要检查重复。每张牌都按照花色和点数排序,保证没有重复并且顺序明确。。

set 是关联容器的一种,是排序好的集合(自动排序) ,不能有重复的元素。

  • 不能直接修改set容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破 坏,再在其上进行查找等操作就会得到错误的结果。若要修改set 容器中某个元素的值,则先删除该元素,再插入新元素。
  • multiset容器类似set容器 ,但它能保存重复的元素。(mult开头有多个的意思 mutimedia多媒体,muticultural多元文化)
  • set支持双向迭代器,在插入和删除时,所以不能直接采用迭代器++/–的方式。 v在STL中使用结构体 ,需要对特定要求的运算符进行重载;
  • STL默认使用小于号来排序,因此,默认重载小于号: (如 果使用greater比较器就需重载大于号),且要注意让比较函数对相同元素返回false.
函数名set 用法map 用法说明
insert 插入元素,返回迭代器mySet.insert(value),插入**键值对 ** myMap.insert({key, value}) 或myMap.insert(make_pair(key, value));如果键已存在,则不会插入新键值对,直接返回已存在的迭代器
size返回容器中元素的个数同set
find查找元素,返回迭代器mySet.find(value)同set myMap.find(key)若未找到则返回 end()迭代器
operator[] -(不适用)访问/修改指定键对应的值(若键不存在则插入默认构造的值
count返回等于给定值的元素个数 mySet.count(value);返回键等于给定关键字的键值对个数 myMap.count(key)只能是 0 或 1)

通用的成员函数:

end 返回指向容器中最后一个元素之后位置的迭代器 返回指向容器中最后一个键值对之后位置的迭代器

begin 返回指向容器中第一个元素的迭代器 同set

clear 清空容器,删除所有元素 清空容器,删除所有键值对

erase 删除元素,可通过迭代器或值删除 删除键值对,可通过迭代器或键删除 mySet.erase(it);mySet.erase(value);

	set<int> mySet;mySet.insert(5);// 插入元素mySet.insert(2);mySet.insert(8);mySet.insert(1);// 查找元素(返回迭代器)set<int>::iterator it=mySet.find(1);if (it!=mySet.end()) {cout<<"Found: "<<*it<<endl;}mySet.erase(it);// 删除元素cout<<"Size1: "<<mySet.size() <<endl; 	// 获取元素个数mySet.erase(5); // 使用值删除mySet.clear();// 清空容器cout<<"Size2: "<<mySet.size() <<endl;	// 获取元素个数
------------------------------set<string> partyGuests; // 定义一个 set,模拟聚会的宾客名单partyGuests.insert("Alice");    // 添加一些宾客partyGuests.insert("Bob");partyGuests.insert("Charlie");partyGuests.insert("Alice");  // Alice 已经在名单上了,不会重复添加// 输出所有的宾客,按照字母顺序排列for (set<string>::iterator it = partyGuests.begin(); it != partyGuests.end(); it++) {cout << *it << " ";}cout << endl;  // 输出:Alice Bob Charlieset<string>::iterator search_it = partyGuests.find("Charlie"); // 查找某个宾客if (search_it != partyGuests.end()) {cout << "Charlie 已被邀请参加聚会!" << endl;} else {cout << "Charlie 没有被邀请。" << endl;}partyGuests.erase("Bob");  //  // 删除某个宾客 Bob 不来了,移除他cout << "当前聚会有 " << partyGuests.size() << " 位宾客。" << endl;    // 查看聚会的宾客人数if (partyGuests.empty()) {    // 查看聚会是否为空cout << "聚会没有宾客。" << endl;}partyGuests.clear();  // 聚会取消,清空所有宾客cout << "聚会已取消,清空所有宾客。" << endl;

自定义排序规则

  • set 会使用元素类型的 < 运算符对元素进行升序排序。
  • 可以通过指定自定义的比较器来改变排序规则,例如使用 greater<T> 来实现降序排序,或者自定义一个比较器来按特定的规则排序。
  • 自定义排序规则通常是通过提供一个**函数对象(结构体或函数指针)**实现的。
  • 对于基本类型(如 intdouble 等),默认按照升序排列。对于自定义类型(如类或结构体),set 默认使用 < 运算符进行排序。如果你没有为自定义类型定义 < 运算符,编译器会报错。

(按字符串长度排序)

假设你有一个 set 来存储字符串,并希望按字符串的长度进行排序(而不是字母顺序)。你可以通过自定义比较器来实现:

#include <iostream>
#include <set>
#include <string>
using namespace std;
// 自定义比较器,按字符串长度排序
struct CompareByLength {bool operator()(const string& a, const string& b) const {return a.length() < b.length();  // 按长度升序排列}
};
int main() {// 使用 lambda 表达式定义降序排序规则set<int, greater<int>> s;  s.insert(5);s.insert(2);s.insert(8);// 输出按降序排列的元素for (int num : s) {cout << num << " ";  // 输出 8 5 2 }set<string, CompareByLength> s;s.insert("apple");s.insert("banana");s.insert("kiwi");s.insert("orange");// 输出按字符串长度排序的元素for (const string& str : s) {cout << str << " ";  // 输出 kiwi apple orange banana}return 0;
}

相关文章:

[HNOI2002] 营业额统计 STL - set集合

文章目录 [HNOI2002] 营业额统计题目描述样例输入 #1样例输出 #1 提示题解相关知识点set [HNOI2002] 营业额统计 STL - set解题 题目描述 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出…...

fastAPI接口(普通流式响应和大模型流式响应)

1. 流式输出和非流失输出&#xff1a; 大模型的流式输出&#xff08;Streaming Output&#xff09;和非流式输出&#xff08;Non-streaming Output&#xff09;是指在生成文本或其他输出时&#xff0c;如何将结果返回给用户或下游系统。 流式输出 (Streaming Output)&#xf…...

Linux系统安装node.js

一、node官网下载想要的node版本 https://nodejs.org/en/download/package-manager 二、将tar.xz文件解压 tar -xvf node-vxxx.tar.xz 三、改文件夹的名字&#xff0c;改成nodejs mv node-xxx nodejs 四、复制nodejs文件&#xff0c;并上传到linux 服务器 /usr/local 目录下…...

《解决两道有趣的编程问题:交替数字和与简单回文》

在编程的世界里&#xff0c;算法和逻辑的挑战无处不在。今天&#xff0c;我们将用 Python 来解决两道有趣的编程问题&#xff0c;分别是计算交替数字和以及生成简单回文。 一、交替数字和&#xff08;Alternating Sum of Numbers&#xff09; 1. 问题描述 给定一系列整数&am…...

2412d,d的8月会议

原文 总结 替换D的逃逸分析 Rikki说,他一个月前曾与Dennis讨论过简化D的逃逸分析,但没有结果.在BeerConf上,他再次提起了它,Dennis说他一直在考虑它. Rikki也与Walter谈过这件事,Walter曾说过DIP1000并没有完全如期工作,且有点太复杂了. 因此,Rikki想讨论按D逃逸分析方法替…...

WEB自动化测试(selenium工具)框架、面试题

一、什么是web自动化测试 让程序员代替人为去验证web项目功能的过程 二、什么web项目适合自动化测试 1)需求变动不频繁 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁&#xff0c;测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本&…...

前端自动化部署之ssh2和ssh2-sftp-client

ssh2-sftp-client 本身是一个专门用于处理 SFTP文件操作的库&#xff0c;它不直接提供执行远程命令的功能。但是可以通过它的底层依赖库 ssh2 实现执行命令的功能。 以下是实现方法和示例代码&#xff1a; 方法一&#xff1a;使用 ssh2 执行远程命令 ssh2 是 ssh2-sftp-client…...

python pandas 优化内存占用(一)

最近我用python处理excel&#xff0c;使用的是pandas库&#xff0c;我发现pandas库非常占用内存&#xff0c;一直想研究下如何优化pandas的内存占用&#xff0c;但一直没腾出空来&#xff0c;最近终于有时间研究一把了&#xff0c;我先把优化方法写上&#xff0c;如果你想了解更…...

FutureCompletableFuture实战

1. Callable&Future&FutureTask介绍 直接继承Thread或者实现Runnable接口都可以创建线程&#xff0c;但是这两种方法都有一个问题就是&#xff1a;没有返回值&#xff0c;也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景&#xff0c;而Fu…...

Loki 微服务模式组件介绍

目录 一、简介 二、架构图 三、组件介绍 Distributor&#xff08;分发器&#xff09; Ingester&#xff08;存储器&#xff09; Querier&#xff08;查询器&#xff09; Query Frontend&#xff08;查询前端&#xff09; Index Gateway&#xff08;索引网关&#xff09…...

peerDependencies对等依赖

在 package.json 中平时常用的有字段有 dependencies 和 devDependencies&#xff0c;但 peerDependencies 平时都没咋看到过&#xff0c;今天具体讲讲 peerDependencies 的作用 一、什么是对等依赖 peerDependencies 可以翻译为“对等依赖”或“同行依赖”。这个术语在 npm …...

贪心算法 part01

class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) { // 取区间累计的最大值&#xff08;相当于不断确定最大子序终止位置&#xff…...

java开发入门学习二 - 变量

目录 一 关键字 ​编辑 二 标识符 三 变量 变量数据类型 变量注意点 四 数据类型 前置知识 - 计算机存储单位 整型数据类型 浮点数据类型 字符数据类型 布尔数据类型 五 数据类型间的计算 基本数据类型之间的计算 自动类型提升 强制类型转换 引用数据类型 Sti…...

Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

Part1: Summary 项目中我们常用到命名&#xff0c;使用 enum 转成 string &#xff0c;方便简洁&#xff1b;Qt给我们提供了一个很方便的功能 Q_ENUM&#xff0c;可以实现枚举字符串互转&#xff1b; Q_ENUM宏将枚举注册到元对象系统中&#xff1b; QMetaEnum::fromType获取枚…...

0004.基于springboot+elementui的在线考试系统

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 愿世界和平再无bug 一、系统架构 前端&#xff1a;vue| elementui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、登录角色 1.管理员 2.老师 …...

基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作

协议设计目标 1. 安全性&#xff1a;通过 iAP2 协议与 MCU 设备进行安全通信。 2. 通用性&#xff1a;支持对安防设备的常见功能进行操作&#xff0c;如状态查询、设备控制、参数配置等。 3. 高效性&#xff1a;数据结构简洁清晰&#xff0c;易于解析和扩展。 4. 扩展性&#x…...

02-5.python入门基础一控制流(while)

Python 控制流是指控制程序执行顺序的机制&#xff0c;它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。 while 循环的用法与示例 语法结构及要点 在 Python 中&#xff0c;while循环是一种基于条件判断的循环结构&#xff0c;其语法构成如下&#xff1a;…...

Go语言开发入门与实战

Go语言(简称Golang)由Google开发,是一门现代化的编程语言,因其简洁高效、并发支持友好、跨平台特性而在后端服务开发、云计算等领域大放异彩。本文将介绍Go语言的基本特点、开发环境配置,并通过一个简单的实战项目带领大家快速上手。 一、Go语言的特点 简单易学:语法简洁…...

HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例

ArkWeb简介 ArkWeb&#xff08;方舟Web&#xff09;是HarmonyOS Next中提供的一个Web组件&#xff0c;主要用于在应用程序中显示Web页面内容。这个组件使得开发者可以在HarmonyOS应用中嵌入Web页面&#xff0c;从而降低开发成本&#xff0c;提升开发和运营效率。 使用场景 A…...

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“&#xff0c;将应用与Microsoft Store关联时&#xff0c;一直提示网络错误。 查了一下论坛&#xff0c;发现之前也经常出现&#xff0c;但我是第一次遇到。 不能就这样一直被卡着呀&#xff0c;研究了一下&#xff0c;还…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...