• 【USACO 2006 February Silver】产奶安排Stall Reservations-贪心


    Descriptions:

    这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于必须在[A,B ]的时间内产奶(1 <= A <= B <= 1,000,000)当然, FJ必须为他们创造一个决定挤奶时间的系统.当然,没有牛想与其他奶牛分享这一时光

    帮助FJ做以下事:
    使每只牛都有专属时间的最小牛棚数
    每只牛在哪个牛棚
    也许有很多可行解。输出一种即可,采用SPJ

    Input

    第一行一个数字 N

    第 2..N+1行: 第 i+1行 描述了i号奶牛挤奶的起止时间

    Output

    第一行:牛棚最小数量

    Lines 2..N+1: 第 i+1行 描述了i奶牛被安排的牛棚

    Sample Input

    5
    1 10
    2 4
    3 6
    5 8
    4 7

    Sample Output

    4
    1
    2
    3
    2
    4


    总结

    • 贪心题,算法竞赛上有讲,按照开始时间由小到大排序即可
    • 不会改小根堆,默认大根堆,所以插入负数,算法竞赛上最后一节有讲
    • 貌似还能用set,线段树,优先对列做?

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #define maxn 50005
    using namespace std;
    priority_queue<int> q;
    int n,ans=1;
    struct fdfdfd{int a,b;}e[maxn];
    bool cmp(fdfdfd x,fdfdfd y){return x.a<y.a;}
    int main()
    {
    //	freopen("a.in","r",stdin);
    //	freopen("a.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d%d",&e[i].a,&e[i].b);
    	sort(e+1,e+n+1,cmp);
    	q.push(-e[1].b);
    	for(int i=2;i<=n;++i)
    	{
    		int minn=q.top();
    		if(minn<=-e[i].a) ++ans,q.push(-e[i].b);
    		else q.pop(),q.push(-e[i].b);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    RabbitMqBase消息队列小结
    PtrSwap不仅仅是原地交换两个数
    InterfaceSummary接口小结
    InterfaceDesign接口设计原则
    InitOrder初始化执行顺序
    golang面向对象编程思想
    golang之工厂模式
    golang之方法
    golang之结构体使用注意事项和细节
    golang之匿名函数结合defer
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/13771510.html
Copyright © 2020-2023  润新知