众所周知,十五酱有很多的衣服,而且十五酱东西收拾的非常糟糕。

所以十五酱经常找不到合适的衣服穿,于是她觉得收拾一下屋子,把衣服配成一套一套的~(即一件衬衫一件裤子。

十五酱一共有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的更多相关文章

  1. HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)

    题意:一个n个点的树,询问某两点之间的简单路径,问路径上任选三边能否组成一个三角形. N<100000,权值<109 思路: 这里最神奇的思路过于以下这个: n个数,任意三个都不能组成三角 ...

  2. HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)

    题意:n个点的一棵树,树的边上有权值.一条路径的权值定义成这条路径上所有边的权值的xor.问所有路径的最大权值是多少. 思路: 首先,树上任意两点之间的路可以表示成 这两点到根节点的路- 其最近公共祖 ...

  3. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  4. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

  5. Bootstrap<基础十五> 输入框组

    Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...

  6. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...

  8. 十五个常用的jquery代码段【转】

    好的文章顶一个 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.t ...

  9. 十五个常用的jquery代码段

    十五个常用的jquery代码段 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top ...

随机推荐

  1. c# IO操作

    今天我们主要讨论的IO的一些操作,首先我们先引入三个变量: /// <summary> /// 配置绝对路径 /// </summary> private static str ...

  2. .Net语言 APP开发平台——Smobiler学习日志:获取或存储图像路径设置

    ResourcePath属性 一.属性介绍 获取或设置图像存储路径,默认设置为“image”,表示的ResourcePath是在程序运行路径下的Image文件夹(bin\Debug\Image): 该 ...

  3. GUID获取16位19位22位的唯一字符串

    /// <summary> /// 根据GUID获取16位的唯一字符串 /// </summary> /// <param name=\"guid\" ...

  4. Phpstudy升级到Mysql8

    之前一直用的mysql5.5,最近发现Mysql8更新了很多新特性以及查询效率的提升,觉得很有必要更新下开发版本,好,废话不多说: 1.下载安装包,下载地址:mysql8.0  .如果你想要下载其它版 ...

  5. 配置javaJDK环境

    1.官网下载JDK包 2.解压包 3.打开vi /etc/profile文件添加一下内容 export JAVA_HOME=/usr/jdk1.8.0_121 #你的jdk所在的目录 export C ...

  6. Activiti(二) springBoot2集成activiti,集成activiti在线设计器

    摘要 本篇随笔主要记录springBoot2集成activiti流程引擎,并且嵌入activiti的在线设计器,可以通过浏览器直接编辑出我们需要的流程,不需要通过eclipse或者IDEA的actiB ...

  7. 纯CSS修改checkbox复选框样式-02

    我有用过这个纯修改input属性的 本人修改后的代码和效果图(修的不好), 这个是改动最简单的: css代码 input[type=checkbox]{ visibility: hidden; } i ...

  8. TCP客户端

    TCP通信客户端-解决数据包接收不全的过程 背景:5个串口条码枪,通过MOXA Nport系列转换器,以TCPServer的形式推送扫描到的条码到客户端.5个条码枪均位于流水线上方的支架上,流水线货物 ...

  9. BIM与GIS

    BIM行业是建筑与IT结合而形成的一个新兴行业,既然能说是行业,说明它包含的内容非常丰富,懂一点和完全懂是两码事,就好像一滴水和一片大海的范围一样.现在国内有很多高校开设了BIM专业,并对口招收了学生 ...

  10. Android 获取 上下文环境参数 getResources

    1----context.getResources().getConfiguration().orientation;//获取屏幕方向int类型,1:portrait,2:landscape 2--- ...