`
暴风雪
  • 浏览: 390557 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[multiset][pair][贪心]hdoj 4268:Alice and Bob

阅读更多

大致题意:
    alice和bob每个人各有n张卡片,每张卡片都有自己的长和宽。现在规定对于alice的一张卡片a,和bob的一张卡片b。如果a的长和宽都大于等于b,则a可以覆盖b。每张卡片都只能覆盖和被覆盖一次。求alice用手中的卡片最多能覆盖多少bob的卡片。

 

大致思路:

    贪心+各种数据结构。

    贪心的策略是,从小到大枚举alice的每张卡片,每次都在bob的卡片中,挑出边长小于当前卡片的所有卡片。然后再在这些卡片中选出宽最小的可以被当前卡片覆盖的卡片。

    multiset的lower_bound函数请参见  http://blog.csdn.net/niushuai666/article/details/6734650

 

#include<utility>
#include<cstdio>
#include<vector>
#include<set>
#include<iostream>
#include<algorithm>
using namespace std;
const int nMax=100100;
pair<int,int>app[nMax];pair<int,int>bpp[nMax];
multiset<int> stt;
int main() {
    int t,n,i,j,a,b,c,ans;
    scanf("%d",&t);
    while(t--)
    {
        stt.clear();
        ans=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&app[i].first,&app[i].second);
        }
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&bpp[i].first,&bpp[i].second);
        }
        sort(app,app+n);
        sort(bpp,bpp+n);
        int bpos=0;
        for(i=0;i<n;i++)
        {
            while(bpos<n&&bpp[bpos].first<=app[i].first)
            {
                stt.insert(bpp[bpos].second);
                bpos++;
            }
            if(stt.size()>=1)
            {
                multiset<int>::iterator it = stt.lower_bound(app[i].second);
                if(it==stt.end())it--;        
                if(it!=stt.begin()&&*it>app[i].second)it--;
                if (*it <= app[i].second ) {
                    stt.erase(it);
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
 
0
1
分享到:
评论

相关推荐

    C++multiset介绍及详细使用示例(源代码)

    ### C++ `multiset` 介绍及详细使用示例 #### 概述 在C++标准模板库(STL)中,`std::multiset`是一个关联容器,它能够存储可重复的元素,并且这些元素按照指定的排序规则进行排序。`std::multiset`中的元素默认...

    STL_multiset和STL_set–算法–笔记

    STL_multiset 方法:multisetst; 定义了一个multiset变量st,st里面可以存放T类型数据,并且能自动排序。开始st为空 排序规则:表达式”a&lt;b为true,则a排在b前面 可用的方法 目的 格式 添加元素 st.insert ...

    C++ Certified Professional Programmer (1-60)

    - `pair&lt;multiset&lt;int&gt;::iterator, multiset&lt;int&gt;::iterator&gt; range = s1.equal_range(6);` 这个方法返回一个包含两个迭代器的 `pair`,表示值 6 在 `multiset` 中的出现范围。 3. **遍历 `std::multiset` 中的...

    myostream:方便的输出,适用于所有可迭代项目的容器类型

    &gt; = C ++ 11 支持的容器或类似容器的类型: std :: pair std :: tuple std :: array std :: deque std :: forward_list std :: initializer_list std :: list std :: vector std :: set std :: multiset std :...

    STL容器multiset的使用

    在这个话题中,我们将深入探讨STL容器中的`multiset`,并结合VC6.0环境下的代码示例进行讲解。 **一、STL multiset简介** `multiset`是STL中的一种关联容器,它类似于`set`,但允许插入重复元素。`multiset`内部...

    oracle cast (multiset()as )用法

    通过实例介绍了 cast(multiset() as) 的使用方法,以处理嵌套表的操作

    Almeza_MultiSet_6+_Fix_Update

    《Almeza MultiSet 6+ 修复更新详解:打造全自动软件安装体验》 在现代计算机使用中,软件安装往往是一项耗时且繁琐的工作。尤其是当需要安装大量软件时,手动逐一操作无疑会浪费大量的时间和精力。为此,专门用于...

    C++与操作系统等面试题86

    在C++标准库中,有几种容器用于实现哈希表的功能,它们分别是`std::unordered_set`、`std::unordered_multiset`、`std::unordered_map`以及`std::unordered_multimap`。 - **`std::unordered_set`**:这是一个不...

    懒人工具 Almeza MultiSet,软件全自动安装器Pro6.2.0.795(绿色中文)特别版

    Almeza MultiSet是一款强大的软件全自动安装器,它专为那些希望简化软件部署和管理的“懒人”设计。这款工具能够帮助用户自动化地安装、配置和管理多种应用程序,极大地节省了手动安装软件的时间和精力。Pro6.2.0....

    C++-中的multiset容器

    ### C++中的multiset容器详解 #### 引言 `multiset`是C++标准模板库(STL)中的一种关联容器,它主要用于存储数据,并能够从数据集合中取出数据。`multiset`的一个显著特点是它允许存储重复的键值,并且会自动根据...

    Python库 | multiset_multicover-0.4-cp37-cp37m-win_amd64.whl

    可能包括贪心算法、动态规划或更复杂的组合优化算法,这些算法可以处理大规模数据,找出最优解或近似最优解。使用这样的库,开发者可以避免从头实现这些复杂算法,从而节省时间和提高代码质量。 `cp37`和`cp37m`是...

    Set:Swift中Multiset和PredicateSet的实现

    Multiset ( 1 , 2 , 3 ) + Multiset ( 3 , 4 , 5 ) // == Multiset(1, 2, 3, 3, 4, 5) // Difference Multiset ( 1 , 2 , 3 ) - Multiset ( 2 , 3 ) // == Multiset(1) // Intersection Multiset ( 1 , 2 , 3 ) & ...

    almeza multiset pro v8.7.6中文注册版.rar

    安装说明:安装后先不要立即运行Almeza MultiSet,将内附的“activate_multiset.amltkey”文件复制到C:\Program Files\Almeza\MultiSet目录下面即是正式版。点击菜单View--&gt;Language--&gt;在General中选择...

    Almeza MultiSet -Windows自动安装软件的工具

    《Almeza MultiSet——Windows自动安装软件利器详解》 在Windows操作系统中,软件的安装过程通常需要用户手动执行一系列步骤,这对于批量部署或者需要快速安装多款软件的场景而言,无疑增加了工作负担。为此,专业...

    Almeza MultiSet Pro 7.8.1绿色版

    MultiSet是一款界面简洁的自动程序安装工具。不需要编写程序,用这个程序可以是你从大量的程序安装过程中解放出来。并且可以在安装过程中实现注册信息的输入 Almeza MultiSet Pro 7.8.1绿色版 自动程序安装

    C++模板(vector、map、multimap、set、multiset)

    在C++标准库中,模板被广泛应用于STL(Standard Template Library,标准模板库),其中包括了各种容器如vector、map、multimap、set和multiset。这些容器都是模板类,它们提供了高效的数据组织和操作方式。 1. **...

    Almeza MultiSet(程序集成自动安装工具)6.7多国语言绿色特别版

    Almeza MultiSet可通过软件安装管理器将常用程序集成到一起,它先录制软件的安装过程,下次安装同一软件时就会采用“回放”的方式... 小提示:如果需要将MultiSet中的所有程序安装到位,那么直接选择“安装所有”即可

    Python库 | multiset_multicover-0.2-cp310-cp310-win32.whl

    标题中的"multiset_multicover-0.2-cp310-cp310-win32.whl"就是一个这样的库,它针对Python 3.10版本进行了优化,并且适用于Windows 32位系统。 首先,我们来理解一下`multiset_multicover`库。在数学和计算机科学...

    C++ STL入门教程(7) multimap、multiset的使用

    C++ STL入门教程(7) multimap、multiset的使用 本文主要介绍了C++ STL中multimap和multiset的使用方法,multimap是一对多索引,multiset是多元集合,都是STL容器中非常重要的组件。 一、multimap(一对多索引) ...

Global site tag (gtag.js) - Google Analytics