[bzoj1707]tanning分配防晒霜_贪心+排序

tanning分配防晒霜 bzoj-1707

    题目大意:给出每个点所能接受的区间,给出m个可以使单个点固定在一个值的方法,每种方法能使用有限次。

    注释:1<=N<=2500

      想法:这题是瞎jb写然后A了,看了大佬的证明才知道自己写的贪心是正确的。对于每一个防晒霜来讲,我显然是想让它使用在上界更大的奶牛身上,证明太恶心了,luogu上全都是,自己随意看一下就好了qwq。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int ans;
struct Node
{
	int l,r;
}a[10010];
bool cmp_for_a(Node a,Node b)
{
	return a.r==b.r?a.l<b.l:a.r<b.r;
}
struct Abcd
{
	int val;
	int num;
}b[10010];
bool cmp_for_b(Abcd a,Abcd b)
{
	return a.val<b.val;
}
inline bool check(int i,int j)
{
	if(a[i].l<=b[j].val&&a[i].r>=b[j].val&&b[j].num) return true;
	return false;
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i].l,&a[i].r);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&b[i].val,&b[i].num);
	}
	sort(a+1,a+n+1,cmp_for_a);
	sort(b+1,b+m+1,cmp_for_b);
	// bool flag;
	for(int i=1;i<=n;i++)
	{
		// flag=false;
		for(int j=1;j<=m;j++)
		{
			if(check(i,j))
			{
				// flag=true;
				ans++;
				b[j].num--;
				break;
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}

     小结:贪心题总是很有意思qwq

posted @ 2018-03-20 20:25  JZYshuraK_彧  阅读(225)  评论(0编辑  收藏  举报