hdu 4268 multiset+贪心

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

 1 /*
 2 HDU 4268
 3 贪心+STL
 4 */
 5
 6 #include<stdio.h>
 7 #include<math.h>
 8 #include<iostream>
 9 #include<set>
10 #include<algorithm>
11 using namespace std;
12 const int MAXN=200010;
13 struct Node
14 {
15     int h,w;
16     int flag;
17 }node[MAXN];
18 bool cmp(Node a,Node b)
19 {
20     if(a.h!=b.h)return a.h<b.h;
21     else if(a.w!=b.w)return a.w<b.w;
22     else return a.flag>b.flag;
23 }
24 multiset<int>mt;
25 multiset<int>::iterator it;
26 int main()
27 {
28     #ifndef ONLINE_JUDGE
29     freopen("1.in","r",stdin);
30     #endif
31     int T;
32     int n;
33     scanf("%d",&T);
34     while(T--)
35     {
36         scanf("%d",&n);
37         for(int i=1;i<=n;i++)
38         {
39             scanf("%d%d",&node[i].h,&node[i].w);
40             node[i].flag=1;
41         }
42         for(int i=n+1;i<=2*n;i++)
43         {
44             scanf("%d%d",&node[i].h,&node[i].w);
45             node[i].flag=2;
46         }
47         sort(node+1,node+2*n+1,cmp);
48         mt.clear();
49         /*for(int i=1;i<=2*n;i++)
50         {
51             printf("%d %d %d\n",node[i].h,node[i].w,node[i].flag);
52         }*/
53         int ans=0;
54         for(int i=1;i<=2*n;i++) //1覆盖2
55         {
56             if(node[i].flag==2)mt.insert(node[i].w);
57             else
58             {
59                 if(!mt.empty())
60                 {
61                     it=mt.begin();
62                     if(node[i].w>=(*it))    //multiset是升序排列的,每次begin是出来最小的值,这个值不一定最接近w,所以需要重新找
63                     {
64                         ans++;
65                         it=mt.upper_bound(node[i].w);
66                         it--;
67                         mt.erase(it);
68                     }
69                 }
70             }
71         }
72         printf("%d\n",ans);
73     }
74     return 0;
75 }
时间: 2024-10-08 15:56:57

hdu 4268 multiset+贪心的相关文章

HDU 4268 Alice and Bob(贪心+multiset)

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

2014多校第一场D题 || HDU 4864 Task (贪心)

题目链接 题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级.如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于任务的等级.一台机器只能完成一个任务,一个任务只能被一台机器完成.每个机器完成一个任务公司能够获得500*xi+2*yi (此处xy都是指被完成的任务的).输出所有机器能完成的最多任务数,和最大盈利. 思路 :贪心,自己做的时候想了各种排序都不对,没有考虑到500*xi+2*yi 这个公式的重要性.

HDU 4268

http://acm.hdu.edu.cn/showproblem.php?pid=4268 学会了multiset的用法,与set不同的是这个可以插入相同元素 对w排序,对合适的w用multiset插入对应的h,logn完成查找 #include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <cmath> #include <set&

HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可以工作的最长时间和一个可以完成的任务的难度的最大值, 一台机器能完成一个任务的条件是这台机器的最长工作时间和能完成任务的难度值必须都大于等于这个任务,而且一台机器最多完成一个任务,假设一个任务的时间为t,难度值为x,那么完成这个任务可以赚到的钱 money = 500 * t + 2 * x; 现在

hdu 4869 Task(贪心)

题目链接:hdu 4869 Task 题目大意:有n台机器,m个任务,每个机器和任务都有有xi和yi,要求机器的xi,yi均大于等于任务的xi和yi才能执行任务.每台机器一天只能执行一个任务.要求完成的任务数尽量多,并且说金额尽量大.完成每个任务的金额为xi?500+yi?2 解题思路:贪心,mach[i][j]表示等级为i,时间为j的机器数量,task[i][j]表示等级为i,时间为j的机器数量.每次优先减少i,因为对应等级减少100,对应的金额代价也不会减少超过500(即时间减少1). 每次

HDU 4864 Task(贪心)

HDU 4864 Task 题目链接 题意:有一些机器和一些任务,都有时间和等级,机器能做任务的条件为时间等级都大于等于任务,并且一个任务只能被一个机器做,现在求最大能完成任务,并且保证金钱尽量多 思路:贪心,对于每个任务,时间大的优先去匹配,时间相同的,等级大的优先去匹配,因为时间占得多,时间多1就多500,而等级最多才差200.然后匹配的时候,尽量使用等级小的去匹配,而时间只要大于它的都可以用,因为是按时间优先,所以如果该时间能匹配大的,其他肯定也能匹配,那么肯定优先匹配大的,所以只要在等级

HDU 4811 Ball(贪心)

2014-05-15 22:02 by Jeff Li 前言 系列文章:[传送门] 马上快要期末考试了,为了学点什么.就准备这系列的博客,记录复习的成果. 正文-计数  概率 概率论研究随机事件.它源于赌徒的研究.即使是今天,概率论也常用于赌博.随机事件的结果是否只凭运气呢?高明的赌徒发现了赌博中的规律.尽管我无法预知事件的具体结果,但我可以了解每种结果出现的可能性.这是概率论的核心. "概率"到底是什么?这在数学上还有争议."频率派"认为概率是重复尝试多次,某种结

HDU 4912 LCA+贪心

Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 531    Accepted Submission(s): 182 Problem Description bobo has a tree, whose vertices are conveniently labeled by 1,2,…,n. Th

HDU 1661 Assigments 贪心法题解

Problem Description In a factory, there are N workers to finish two types of tasks (A and B). Each type has N tasks. Each task of type A needs xi time to finish, and each task of type B needs yj time to finish, now, you, as the boss of the factory, n