l u o g u luogu luogu 2887 2887 2887
P O J POJ POJ 3614 3614 3614
有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。
而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。
那么为了不让奶牛烫伤,又不会没有效果。
给出了L种防晒霜。(1<=L<=2500)每种的数量和固定的阳光强度也给出来了
每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。
第1行:两个以空格分隔的整数:C和L
第2行.C +1:第i行描述牛我的乳液需要两个整数:minSPF i和maxSPF i
第3行C +2 … C + L+1 描述了一种防晒液瓶我用空格隔开的整数:SPFi和Numi
带有整数的单行,该整数是晒黑时可以保护的最大奶牛数
3 2
3 10
2 5
1 5
6 2
4 1
2
将奶牛按承受范围的最低值从大到小排个序,一个个找防晒露,为了让后面的牛能涂,所以选可以涂的最大值
#include
#include
#include
using namespace std;
int C,L,ans;
struct cow
{int start,end;}Cow[2505];
struct spf
{int range,num;}Spf[2505];
bool cmp(cow x,cow y)
{return x.start>y.start;}
bool cmpp(spf x,spf y)
{return x.range<y.range;}
int main()
{
scanf("%d%d",&C,&L);
for (int i=1; i<=C; ++i)
scanf("%d%d",&Cow[i].start,&Cow[i].end);
for (int i=1; i<=L; ++i)
scanf("%d%d",&Spf[i].range,&Spf[i].num);
sort(Cow+1,Cow+C+1,cmp);
sort(Spf+1,Spf+L+1,cmpp);//排序
for (int i=1; i<=C; ++i) {
int maxx=0;
for (int j=1; j<=L; ++j)
if (Spf[j].range>=Cow[i].start && Spf[j].range<=Cow[i].end && Spf[j].num>0)//要满足条件
maxx=max(maxx,j);//取最大值
if (maxx!=0) ans++,Spf[maxx].num--;//记录答案
}
printf("%d",ans);
}