程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 4268 Alice and Bob(multiset)

hdu 4268 Alice and Bob(multiset)

編輯:C++入門知識

hdu 4268 Alice and Bob(multiset)


 

題目大意:就是問你Alice的牌能覆蓋Bob牌最多數量。牌不能翻轉

思路:首先我們不分種類,把牌按高度排序,然後我們在依次判斷牌的種類,如果是Bob的牌,我們就他牌的寬度放入multiset中,如果是Alice的牌就在multiset中找到寬度最大的那一張並刪掉。

 

 

#include
#include
#include
#include
#include
#include

using namespace std;

const int maxn=200005;

struct Node
{
    int h,w,id;
}node[maxn];

bool cmp(Node t1,Node t2)
{
    if(t1.h!=t2.h) return t1.h s;
multiset::iterator ite;

int main()
{
    int n,i,T;
    scanf(%d,&T);
    while(T--)
    {
        scanf(%d,&n);
        for(i=1;i<=2*n;i++)
        {
            scanf(%d%d,&node[i].h,&node[i].w);
            node[i].id=(i<=n);
        }
        sort(node+1,node+2*n+1,cmp);
        s.clear();
        int sum=0;
        for(i=1;i<=2*n;i++)
        {
            if(node[i].id==0) s.insert(node[i].w);
            else
            {
                if(s.empty()||node[i].w<*(s.begin())) continue;
                ite=s.upper_bound(node[i].w);   //查找
                ite--;
                sum++;
                s.erase(ite);      //刪除
            }
        }
        printf(%d
,sum);
    }
    return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved