HRBUST 2069 萌萌哒十五酱的衣服~ multiset+lower_bound

HRBUST 2069 萌萌哒十五酱的衣服~ multiset+lower_bound_第1张图片

Input
多组数据
一行为一个正整数n(n<=80000)如题意;
接下来的n行,按到来时间的先后顺序描述了十五拿衣服种类和属性值

每行有两个正整数a, b,其中a=0表示衬衫,a=1表示裤子,b表示衬衫的特点值或是裤子的特点值。(同一时间内十五手上的衣服不会超过10000个)
Output
每组数据输出一个正整数,表示十五搭配完全部衣服后的衣服属性差的总和mod 1000000以后的结果。

Sample Input
5
0 2
0 4
1 3
1 2
1 5
Sample Output
3
Hint
(abs(3-2) + abs(2-4)=3,最后一个裤子没有衣服可以配~)

十五酱最萌了昂~

在做STL专题的时候遇见了,STL中最不熟悉使用的就是multiset,偷偷学习了大佬的代码,来复习一下.
STL中的multiset有自动排序的功能,并且允许存在重复元素,可以用lower_bound来找到第一个大于等于b的数,找到的如果是第一个,那么就计算第一个,如果是最后一个,就计算最后一个的上一个,如果是中间的,则需要将前后两个比较一下,若差值一样,就返回属性值较小的一个。(记得要将符合的元素从multiset中删除)

#include
#include
#include
#include
#include
using namespace std;
const int mod = 1000000;
multisetm;
int main()
{
    int n,sum,a,b,flag;
    while(~scanf("%d",&n))
    {
        sum = 0;
        flag = -1;
        for(int i=0; i::iterator it1;
                multiset::iterator it2;
                it1 = m.lower_bound(b);
                it2=it1;
                it1--;
                if(it2==m.begin())//如果找到的是第一个元素
                {
                    sum += (abs(b-*it2));
                    m.erase(it2);
                    sum %= mod;
                }
                else  if(it2==m.end())//如果找到的是最后一个元素
                {
                    sum += (abs(b-*it1));
                    m.erase(it1);
                    sum %= mod;
                }
                else //如果找到的是中间的元素
                {
                    if( abs(b-*it2) < abs(b-*it1))//如果属性差值一样,那么十五就会选择属性值较小的一个
                    {
                        sum += (abs(b-*it2));
                        m.erase(it2);
                        sum %= mod;
                    }
                    else
                    {
                        sum += (abs(b-*it1));
                        m.erase(it1);
                        sum %= mod;
                    }
                }
            }
            if(m.empty())
            {
                flag=-1;
            }
        }
        printf("%d\n",sum%mod);
    }
    return 0;
}

原文链接

你可能感兴趣的:(HRBUST 2069 萌萌哒十五酱的衣服~ multiset+lower_bound)