HDU 4268 Alice and Bob(贪心+Multiset的应用)



题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形可以覆盖另一个矩形的条件的是,本身长度大于等于另一个矩形,且宽度大于等于另一个矩形,矩形不可旋转,问你Alice最多能覆盖Bob的几个矩形?

思路:贪心,先按照h将Alice和Bob的矩形排序,对于Alice的每个矩形,如果Bob的矩形的h小于Alice的h,将Bob的w插入到集合中。

然后,在集合中找到不大于Alice矩形d的最大的Bob的d,那么这样做肯定是最优的。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#define eps 1e-6
#define LL long long
using namespace std;  

//const int maxn = 100 + 5;
//const int INF = 0x3f3f3f3f;
struct Card {
	int h, d;
};

Card ca[100010], cb[100010];
bool cmp1(Card A, Card B) {
	return A.h < B.h;
}
multiset<int> ms;

int main() {
//	freopen("input.txt", "r", stdin);
	int t; cin >> t;
	int n;
	while(t--) {
		cin >> n;
		ms.clear();
		for(int i = 0; i < n; i++) scanf("%d%d", &ca[i].h, &ca[i].d);
		for(int i = 0; i < n; i++) scanf("%d%d", &cb[i].h, &cb[i].d);
		sort(ca, ca+n, cmp1);
		sort(cb, cb+n, cmp1);
		int pos = 0, ans = 0;
		for(int i = 0; i < n; i++) {
			while(pos < n) {
				if(ca[i].h >= cb[pos].h) {
			    	ms.insert(cb[pos].d); pos++;
				}
				else break;
			}
			if(ms.empty()) continue;
			multiset<int>::iterator it = ms.upper_bound(ca[i].d);
			if(it != ms.begin()) {
				ans++; ms.erase(--it);
			}
		}
		cout << ans << endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 21:43:16

HDU 4268 Alice and Bob(贪心+Multiset的应用)的相关文章

HDU 4268 Alice and Bob(贪心+multiset)

HDU 4268 题意:Alice与Bob在玩卡片游戏,他们每人有n张卡片,若Alice的一张卡片长与宽都不小于Bob的一张卡片,则Bob的卡片就会被盖住,一张卡片只可以使用一次,且不可旋转求Alice最多可以盖住多少张Bob的卡片. 思路:记录两人卡片情况,并按照长度将两人卡片分别降序排序.遍历两人的卡片,将长度小于Alice的卡片长度的Bob卡片的宽度插入multiset中,在multiset中找到小于等于Alice卡片宽度的第一个数,将这个数给消去且答案+1.//贪心法自行发挥即可. co

hdu 4268 Alice and Bob(贪心+multiset+二分)

Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3511    Accepted Submission(s): 1129 Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In thi

HDU 4268 Alice and Bob 贪心STL O(nlogn)

B - Alice and Bob Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Alice and Bob's game never ends. Today, they introduce a new game. In this game, both of them have N different rectangular cards respectively.

hdu 4268 Alice and Bob(multiset)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4268 题目大意:就是问你Alice的牌能覆盖Bob牌最多数量.牌不能翻转 思路:首先我们不分种类,把牌按高度排序,然后我们在依次判断牌的种类,如果是Bob的牌,我们就他牌的宽度放入multiset中,如果是Alice的牌就在multiset中找到宽度最大的那一张并删掉. #include<cstdio> #include<iostream> #include<cstring>

hdu 4268 Alice and Bob(multiset|段树)

Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2901    Accepted Submission(s): 941 Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this

hdu 4268 Alice and Bob(multiset|线段树)

Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2901    Accepted Submission(s): 941 Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this

HDU 4268 Alice and Bob(multiset的使用)

Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3046    Accepted Submission(s): 995 Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this

HDU 4268 Alice and Bob(贪心)

Alice and Bob                                                                Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Alice and Bob's game never ends. Today, they introduce a new game. I

hdu 4268 Alice and Bob

Alice and Bob Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 5   Accepted Submission(s) : 1 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Alice and Bob's game nev