zoukankan      html  css  js  c++  java
  • hdu 4268 Alice and Bob(贪心+multiset)

    题意:卡牌覆盖,每张卡牌有高(height)和宽(width)。求alice的卡牌最多可以覆盖多少bob的卡牌

    思路:贪心方法就是找h可以覆盖的条件下找w最大的去覆盖。

    #include<iostream>
    #include<stdio.h>
    #include<set>
    #include<algorithm>
    using namespace std;
    
    struct Node{
        int h,w;
        int flag;
    }node[200005];
    
    bool cmp(Node a,Node b){
        if(a.h!=b.h)return a.h<b.h;//升序
        if(a.w!=b.w)return a.w<b.w;//升序
        return a.flag>b.flag;//降序
    }
    
    multiset<int>mt;
    multiset<int>::iterator it;
    
    int main(){
        int t,n,i,ans;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(i=1;i<=n;++i){
                scanf("%d%d",&node[i].h,&node[i].w);
                node[i].flag=1;
            }
            for(i=n+1;i<=2*n;++i){
                scanf("%d%d",&node[i].h,&node[i].w);
                node[i].flag=2;
            }
            sort(node+1,node+1+2*n,cmp);
            mt.clear();
            ans=0;
            for(i=1;i<=2*n;++i){
                if(node[i].flag==2)mt.insert(node[i].w);
                else{
                    if(!mt.empty()){
                        it=mt.begin();
                        if(node[i].w>=(*it)){
                            ++ans;
                            it=mt.upper_bound(node[i].w);//指向键值> key的第一个元素。
                            --it;//指向键值<= key的第一个元素。
                            mt.erase(it);
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    deque-pop_back
    deque-max_size
    deque-insert
    deque-insert
    deque-front
    deque-front
    deque-erase
    deque-erase
    deque-end
    Angular2入门教程-1
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4755685.html
Copyright © 2011-2022 走看看