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

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

十五酱一共有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. 如何将视频导入到ipad中并播放

    首先在电脑上下载并安装itunes,然后用apple账号登入, 在ipad上从apple store中下载一个播放器如KMPlayer 点击itunes上小手机的图标,找到文件共享,选中应用KMPla ...

  2. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  3. DAL分页

    using System;using System.Collections.Generic;using LModel.DTO;using Newtonsoft.Json;using System.Da ...

  4. eclipse中的出现在打包一次后,后面新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承ActionBarActivity解决方法一样

    第一次写博客,有什么问题或者想法的希望各位可以进行评论交流,望大家多多包涵! 遇到的问题是在新建的项目都出错了,出现support_v7下面出现红线及解决方法及为什么eclipse中项目继承Actio ...

  5. .NET WebAPI 利用特性捕捉异常

    声明:本方式及代码只使用与.NET Web API. 先创建类继承ExceptionFilterAttribute类型并复写OnException方法. 代码如下: using System; usi ...

  6. file_get_contents('php://input') 和POST的区别

    之前记得写过这2者的区别,今天看群里有个朋友也提出了怪异的问题,说是“file_get_contents('php://input')获取不到curl post请求的数据的问题”?其实这并不是所谓的& ...

  7. js 向上和向下取整

    Math.ceil(x),Math.floor(x) ◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数:◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近 ...

  8. AI时代大点兵-国内外知名AI公司2018年最新盘点

    AI时代大点兵-国内外知名AI公司2018年最新盘点 导言 据腾讯研究院统计,截至2017年6月,全球人工智能初创企业共计2617家.美国占据1078家居首,中国以592家企业排名第二,其后分别是英国 ...

  9. [ SHELL编程 ] 字符串空格和文件空行删除

    1.删除字符串中空格 (1)删除行首空格 (2)删除行尾空格 (3)删除前.后空格,不删除中间空格 (4) 删除字符串中所有空格 echo " 123 567 " | sed 's ...

  10. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...