[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;
}

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

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

相关文章

使用Dynadot API确定当前是否有正在执行中的请求

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

02、服务器的分类和开发项目流程

硬件介绍 1、服务器分类2.开发流程 1、服务器分类 1.1 服务器分类 1u服务器&#xff08;u表示服务器的厚度&#xff09; 1U4.45cm&#xff1b; 4u服务器&#xff08;u表示服务器的厚度&#xff09; &#xff0c; 服务器有两个电源模块&#xff0c;接在不同的电源&#xff0c;…

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论

目录 一、价值转移理论 1.1. 什么是价值&#xff1f; 1.2. 什么价值创造 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、影响价值创造的因素 &#xff08;3&#xff09;、价值创造的三个过程 &#xff08;4&#xff09;、价值创造的实践 &#xff08;5&…

后摩尔定律时代,什么将推动计算机性能优化的发展?

在摩尔定律时代&#xff0c;每两年芯片上的晶体管数量就会翻一番&#xff0c;这一看似不可避免的趋势被称为摩尔定律&#xff0c;它极大地促进了计算机性能的提高。然而&#xff0c;硅基晶体管不可能一直小下去&#xff0c;半导体晶体管的微型化推动了计算机性能的提升&#xf…

LeetCode:144.前序遍历

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#x…

pdf文件中的表格无损提取方案(pdf转Excel),非OCR

非OCR方案&#xff0c;基于java&#xff1a; aspose 21.11版本&#xff08;网上有破解方法&#xff0c;或者参考我另外一篇文章&#xff09; 转换pdf&#xff08;含表格&#xff09;为excel文件&#xff0c;然后可以使用poi对得到的excel文件进行微调。 但是上述方案&#x…

第十七章:反射+设计模式

一、反射 1. 反射(Reflection)&#xff1a;允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属 性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类的对象(实…

【Linux】结构化命令:for命令

1、基本介绍 for循环假定各个值之间是以空格、制表符或换行符分隔的&#xff0c;因为特殊的环境变量IFS&#xff08;internal field separator&#xff0c;内部字段分隔符&#xff09;&#xff0c;默认情况下&#xff0c;它会将这三者视为字段分隔符。 格式&#xff1a; for v…

Nginx(Linux之Ubuntu)

1.1.什么是Nginx Nginx&#xff08;发音为"engine x"&#xff09;是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年&#xff0c;如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名&#xff0c;适用于…

vue3+TS+vueX的记录

要求&#xff1a;在页面中使用输入框输入回车后将数据保存到vuex中的数组list中 list为一个数组 内部三个属性为 id value status id为时间戳 value为string 输入的字符串 status为定义的三种状态 待办 在办 完成 1、创建仓库 将 仓库拆分 import { createStore } fro…

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…

Javascript-web API-day02

文章目录 01-事件监听02-点击关闭广告03-随机点名案例04-鼠标经过或离开事件05-可点击的轮播图06-小米搜索框07-键盘类型事件08-键盘事件-发布评论案例09-focus选择器10-评论回车发布11-事件对象12-trim方法13-环境对象14-回调函数15-tab栏切换 01-事件监听 <!DOCTYPE html…

c语言-------循环结构

基本概念 循环结构是C语言中一种重要的程序控制结构&#xff0c;它允许程序在满足一定条件的情况下&#xff0c;反复执行一段代码。这可以避免重复编写相似的代码&#xff0c;提高代码的效率和可读性。 while循环 语法格式 while (条件表达式) { 循环体语句; } 执行流程 首先判…

Centos创建共享文件夹拉取文件

1.打开VMware程序&#xff0c;鼠标右检你的虚拟机&#xff0c;打开设置 2.点击选项——共享文件夹——总是启用 点击添加&#xff0c;设置你想要共享的文件夹在pc上的路径&#xff08;我这里已经添加过了就不加了&#xff09; 注意不要中文&#xff0c;建议用share&#xff0c…

SpringBoot项目Jar包使用systemctl运行

1. 前言 SpringBoot项目打成jar包后&#xff0c;可以直接使用 java -jar xxx.jar 启动。但是为了方便启动和停止服务&#xff0c;通常我们会写两个脚本&#xff0c;分别是启动脚本 start.sh 和 停止脚本 shutdown.sh&#xff08;这两个脚本内容我们下文会实现&#xff09;&…

计算机网络-L2TP VPN基础概念与原理

一、概述 前面学习了GRE和IPSec VPN&#xff0c;今天继续学习另外一个也很常见的VPN类型-L2TP VPN。 L2TP&#xff08;Layer 2 Tunneling Protocol&#xff09; 协议结合了L2F协议和PPTP协议的优点&#xff0c;是IETF有关二层隧道协议的工业标准。L2TP是虚拟私有拨号网VPDN&…

踩准智能汽车+机器人两大风口,速腾聚创AI+机器人应用双线爆发

日前&#xff0c;RoboSense速腾聚创交出了一份亮眼的Q3财报。受到多重利好消息影响&#xff0c;其股价也应势连续大涨。截止12月9日发稿前&#xff0c;速腾聚创股价近一个月内累计涨幅已超88%。 财务数据方面&#xff0c;速腾聚创在今年前三季度实现总收入约11.3亿元&#xff0…

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下&#xff0c;从dev合并到qas分支上的代码&#xff0c;推送到远端 1.背景描述 目前在开发的当前项目有四个分支&#xff0c;master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支)&#xff1b; …

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3

Assignment 6Beta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsTeamwork—Beta SprintTeam NameFZUGOObjectiveSprint Essay 3_Day5-Day6 (12.15-12.16)Other Reference1. WeChat Mini Program Design Guide 2. Javascript Style Guid…

凯酷全科技抖音电商服务的卓越践行者

在数字经济蓬勃发展的今天&#xff0c;电子商务已成为企业增长的新引擎。随着短视频平台的崛起&#xff0c;抖音作为全球领先的短视频社交平台&#xff0c;不仅改变了人们的娱乐方式&#xff0c;也为品牌和商家提供了全新的营销渠道。厦门凯酷全科技有限公司&#xff08;以下简…