題目大意:就是問你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; }