码迷,mamicode.com
首页 > 其他好文 > 详细

SPOJ - VISIBLEBOX [multiset的使用]

时间:2017-02-12 10:47:01      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:box   sort   case   min   贪心   ++   个数   元素   can   

tags:[STL][sort][贪心]
题解:
做法:先对数组a进行排序,再将数组a从头到尾扫一遍,使用multiset维护最小值,
如果,即将放入集合的数字>=最小值的两倍,那我们就删除掉多重集合的最小值。
最后,多重集合中元素的个数即为答案。

证明:“人生得意须尽欢,莫使金樽空对月”。当即将进入集合的箱子,装得下
最小的箱子时,若装入并非最小的箱子,或啥也不装,找不到更优解,喵!

#include <iostream>
#include <cstdio> 
#include <set>
#include <algorithm>
using namespace std;
multiset<int> s;
int T, n, a[100000 + 10];
int main()
{
    cin >> T;
    for(int t=1;t<=T;t++) 
    {
        s.clear();
        scanf("%d", &n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d", &a[i]);
        }
        sort(a+1, a+1+n);
        s.insert(a[1]);
        for(int i=2;i<=n;i++)
        {
            int minc = *s.begin();
            if(a[i] >= 2*minc)
            {
                s.erase(s.begin());
            }
            s.insert(a[i]);
        }
        printf("Case %d: %d\n", t, (int)s.size());
    }
} 

  

SPOJ - VISIBLEBOX [multiset的使用]

标签:box   sort   case   min   贪心   ++   个数   元素   can   

原文地址:http://www.cnblogs.com/RUSH-D-CAT/p/6390402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!