HRBUST - 2069-萌萌哒十五酱的衣服~-multiset-lower_bound
众所周知,十五酱有很多的衣服,而且十五酱东西收拾的非常糟糕。
所以十五酱经常找不到合适的衣服穿,于是她觉得收拾一下屋子,把衣服配成一套一套的~(即一件衬衫一件裤子。
十五酱一共有n件衣服,有衬衫有裤子,每一件衣服都有自己的属性值a(a是一个正整数,a<2^31)
十五酱每次手上只能拿一类衣服(如全是裤子,或全是衬衫
如果十五手上都是衬衫,那么当她拿到的下一件衣服是属性值为b的裤子时,她就会从手中的衬衫中找到属性值与这条裤子最接近的搭配成一套丢进衣柜中,如果有两件衣服和裤子的属性差值一样,那么十五就会选择属性值较小的一个衬衫。
如果十五手上的都是裤子,那么当她拿到的下一件衣服是属性值为b的衬衫时,她就会从手中的裤子中找到属性值与这条衬衫最接近的搭配成一套丢进衣柜中,如果有两件裤子和衣服的属性差值一样,那么十五就会选择属性值较小的一个裤子。
当然这样就会产生属性差了。。。。(即abs(a-b))
十五想知道她这样搭配衣服最终产生的属性差是多少
Input
多组数据
一行为一个正整数n(n<=80000)如题意;
接下来的n行,按到来时间的先后顺序描述了十五拿衣服种类和属性值
每行有两个正整数a, b,其中a=0表示衬衫,a=1表示裤子,b表示衬衫的特点值或是裤子的特点值。(同一时间内十五手上的衣服不会超过10000个)
Output
多组数据
每组数据输出一个正整数,表示十五搭配完全部衣服后的衣服属性差的总和mod 1000000以后的结果。
Sample Input5
0 2
0 4
1 3
1 2
1 5
Sample Output3Hint
(abs(3-2) + abs(2-4)=3,最后一个裤子没有衣服可以配~)
十五酱最萌了昂~
过了一个学期,决定来挑战一下以前没写出来的STL题
然而我的知识储备不足,所以借鉴(copy)了
Bryant~xw大佬的代码
原文链接:https://www.cnblogs.com/hhkobeww/p/7684754.html
multiset可加入可重复的元素,并用lower_bound查找第一个不大于b的数。
如果迭代器查到m.begin(),就算第一个就行了,但如果迭代器查到m.end(),就是没查到小于等于b的数,那么就需要返回上一个元素。
如果迭代器查到的是中间的元素,那么就用当前查到的元素计算后和上一个查到的元素计算后比大小,这里要先处理较小的元素,因为题目中这样描述,如果属性差值一样,那么十五就会选择属性值较小的一个,比如说这个样例,3查到4,4上一个元素是2,abs(3-4)==abs(3-2)==1,但2<4,所以先与2配对,这个问题终于在今天想通了-_-|||...
还有些要注意的地方就写进代码注释里了...
#include<iostream> #include<cstdio> #include<cstring> #include<set> #include<algorithm> using namespace std; ; const int mod=1e6; ; multiset<int>m; int main() { int n,a,b; while(cin>>n) { ; ;t<=n;t++) { cin>>a>>b; ) { f=a; m.insert(b); } else if(a==f) { m.insert(b); } else { ///为什么要2个迭代器? ///1.可能会有没查到小于等于b的数,那么就需要返回上一个元素。 ///2.可能会有现在这件物品与属性值更大的另一种物品算出来的值比属性值相对更小的另一种物品要小 multiset<int>::iterator it1; multiset<int>::iterator it2; it1=m.lower_bound(b); it2=it1; it1--; if(it2==m.begin()) { sum=sum%mod+abs(b-*it2); m.erase(it2); } else if(it2==m.end())///如果迭代器查到m.end(),就是没查到小于等于b的数,那么就需要返回上一个元素。 { sum=sum%mod+abs(b-*it1); m.erase(it1); } else { ///如果属性差值一样,那么十五就会选择属性值较小的一个 if(abs(b-*it2)<abs(b-*it1)) { sum=sum%mod+abs(b-*it2);m.erase(it2); } else ///其实这里相当于if(abs(b-*it1)<=abs(b-*it2)) { sum=sum%mod+abs(b-*it1);m.erase(it1); } } } if(m.empty()) { f=-; } } cout<<sum%mod<<endl; } }
HRBUST - 2069-萌萌哒十五酱的衣服~-multiset-lower_bound的更多相关文章
- HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)
题意:一个n个点的树,询问某两点之间的简单路径,问路径上任选三边能否组成一个三角形. N<100000,权值<109 思路: 这里最神奇的思路过于以下这个: n个数,任意三个都不能组成三角 ...
- HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)
题意:n个点的一棵树,树的边上有权值.一条路径的权值定义成这条路径上所有边的权值的xor.问所有路径的最大权值是多少. 思路: 首先,树上任意两点之间的路可以表示成 这两点到根节点的路- 其最近公共祖 ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础十五> 输入框组
Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- 十五个常用的jquery代码段【转】
好的文章顶一个 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.t ...
- 十五个常用的jquery代码段
十五个常用的jquery代码段 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top ...
随机推荐
- 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
前言 在之前的一篇文章中,我们介绍了 如何将一个本地的 Java 应用程序直接部署到阿里云 ECS ,有不少读者反馈,如果目前已经在使用阿里云容器服务 Kubernetes 了,那该如何配合这个插件部 ...
- Shell编程(week4_day1)--技术流ken
本节内容 1.shell简介 2. shell分类 3. 查看shell 4. 第一个shell脚本 5. shell编程常用命令 5.1 grep 5.2 cut 5.3 sort ...
- 第57章 GrantValidationResult - Identity Server 4 中文文档(v1.0.0)
该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantVali ...
- ORM的增删查
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...
- PhpStudy升级MySQL5.7
PhpStudy2017集成环境中的mysql数据库的版本默认是mysql5.5,下面是PhpStudy升级数据库到mysql5.7的方法: 1:备份当前数据库数据,可以导出数据库文件,作为备份,我这 ...
- Java开发笔记(一)第一个Java程序
安装完Java的开发环境Eclipse之后,正是初学者大展身手的时候了,接下来不妨跟着笔者一步一步来,看看第一个Java程序是怎么跑起来的.一开始双击桌面上的Eclipse图标,稍等片刻便弹出Ecli ...
- Android破解——支付宝内购破解方法总结
支付宝破解三种方式: 想学一下支付宝内购的相关知识,但是搜索了论坛,发现但是没有相关的帖子,于是便是打算自己来写一篇总结 一.9000的十六进制代码修改 搜索9000的十六进制,也就是搜索0x2328 ...
- 【大数据】了解Hadoop框架的基础知识
介绍 此Refcard提供了Apache Hadoop,这是最流行的软件框架,可使用简单的高级编程模型实现大型数据集的分布式存储和处理.我们将介绍Hadoop最重要的概念,描述其架构,指导您如何开始使 ...
- Dynamics 365 Online-Security Updates On TLS 1.2
不仅仅是Dynamics 365,现在MS许多产品都开始主推使用TLS1.2,所以在日常开发中,需要注意这部分的改动. 如果访问某个服务,出现错误信息类似于“Could not create SSL/ ...
- 广州.NET微软技术俱乐部 - 动手实验室
本文正在写草稿中, 发布时会在群里单独通知