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

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

十五酱一共有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. LeetCode专题-Python实现之第20题:Valid Parentheses

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  2. Spark框架详解

    一.引言 作者:Albert陈凯链接:https://www.jianshu.com/p/f3181afec605來源:简书 Introduction 本文主要讨论 Apache Spark 的设计与 ...

  3. Spring框架基础(下)

    log4J 导入log4J.jar 创建log4J.properties # Create a file called log4j.properties as shown below and plac ...

  4. Java_设计模式之享元模式

    1.关于享元模式 享元模式有点类似于单例模式,都是只生成一个对象被共享使用.享元模式主要目的就是让多个对象实现共享,减少不会要额内存消耗,将多个对同一对象的访问集中起来,不必为每个访问者创建一个单独的 ...

  5. jQuery.parseJSON()函数详解

    jQuery.parseJSON()函数用于将格式完好的JSON字符串转为与之对应的JavaScript对象. 所谓”格式完好”,就是要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双 ...

  6. procemon

    全记录然后筛选子进程,保存成csv 然后用程序处理 需要去掉重复的文件

  7. 访问vsts私有nuget

    访问vsts私有nuget Intro 有时候我们可能要自己搭建一个 nuget,如果不对外公开,即包浏览也是需要权限的,那我们应该怎么做才可以支持在哪里都可以正常的还原包呢? 我是在 VSTS(Vi ...

  8. Git:修改Git Bash默认打开位置(win10)

    1.起因 大家写的代码不可能直接保存在根目录下,但是Git Bash每次一打开就是根目录,每次都要切换路径很麻烦. 2.修改Git Bash默认打开位置 1)Git Bash右键 -> 属性 2 ...

  9. 【Linux】【Java】CentOS7安装最新版Java1.8.191运行开发环境

    1.前言 本来在写[Linux][Apatch Tomcat]安装与运行.都快写完了. 结果...我忘记安装 Java 环境 然后...新开了博客编辑页面. 最后...我的那个没了...没了...真的 ...

  10. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...