zoukankan      html  css  js  c++  java
  • bzoj3389 [Usaco2004 Dec]Cleaning Shifts安排值班

    Description

        一天有T(1≤T≤10^6)个时段.约翰正打算安排他的N(1≤N≤25000)只奶牛来值班,打扫
    打扫牛棚卫生.每只奶牛都有自己的空闲时间段[Si,Ei](1≤Si≤Ei≤T),只能把空闲的奶牛安排出来值班.而且,每个时间段必需有奶牛在值班.  那么,最少需要动用多少奶牛参与值班呢?如果没有办法安排出合理的方案,就输出-1.

    Input

     
        第1行:N,T.
        第2到N+1行:Si,Ei.

    Output

     
        最少安排的奶牛数.

    Sample Input


    3 10
    1 7
    3 6
    6 10

    Sample Output


    2


    样例说明
    奶牛1和奶牛3参与值班即可.


    原来想的是dp,结果发现T来T去的在T

    后来想了一下是贪心

    假设当前已经覆盖了1到l

    那么找左节点<=l的右节点最大的r,令l=max(l,a[i].r),然后继续

    wa了几次……因为以为左节点大的一定右节点大,实际上这显然不正确

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<deque>
    #include<set>
    #include<map>
    #include<ctime>
    #define LL long long
    #define inf 0x7ffffff
    #define pa pair<int,int>
    using namespace std;
    pa a[25010];
    int n,m,now,ans,l;
    inline LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    inline bool cmp(const pa &a,const pa &b)
    {return a.first<b.first||a.first==b.first&&a.second<b.second;}
    int main()
    {
    	n=read();m=read();
    	a[0]=make_pair(0,0);
    	for (int i=1;i<=n;i++)
    	{
    		a[i].first=read();
    		a[i].second=read();
    	}
    	sort(a+1,a+n+1,cmp);
    	while (l<m)
    	{
    		int sav=l;
    		while (now<n&&a[now+1].first<=sav+1)now++,l=max(l,a[now].second);
    		if (now==n&&a[now].second<m||a[now+1].first>l+1)
    		{
    			printf("-1");
    			return 0;
    		}
    		ans++;
    	}
    	if (l<m)
    	{
    		printf("-1");
    		return 0;
    	}
    	printf("%d
    ",ans);
    }
    

      

    ——by zhber,转载请注明来源
  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/zhber/p/4035898.html
Copyright © 2011-2022 走看看