• [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
    ",ans);
    	return 0;
    }
    

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

  • 相关阅读:
    布局管理器
    下拉列表框
    时间,日期选择器
    关于部分基本控件的使用
    关于Activity
    什么时候修改class
    JavaScript Break 和 Continue 语句
    JavaScript While 循环
    JavaScript For 循环
    JavaScript Switch 语句
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8612294.html
Copyright © 2020-2023  润新知