题意:
给定一些牛的工作时间[a,b],表示从a到b,包括a,b,求安排最少的牛牛,使的所有的时间段都有牛牛在工作
可以用一个结构体来保存信息
struct node
{
int l,r;//左右坐标
};
思路就是排序,然后贪心
对于每一个参考段,找到满足条件的并可以使x坐标尽量大的情况
第一次写WA了N次。。学习到了
给定一些牛的工作时间[a,b],表示从a到b,包括a,b,求安排最少的牛牛,使的所有的时间段都有牛牛在工作
可以用一个结构体来保存信息
struct node
{
int l,r;//左右坐标
};
思路就是排序,然后贪心
对于每一个参考段,找到满足条件的并可以使x坐标尽量大的情况
第一次写WA了N次。。学习到了
- #include <iostream>
- #include <algorithm>
- using namespace std;
- struct seg{int l,r;
- bool operator<(const seg&a)const
- {return l<a.l||(l==a.l&&r<a.r);}
- }s[25000];
- int ans;
- int main()
- {
- int n,t,i,j,cr,mm,tmax,mid;bool flag;
- //freopen("D://in.txt","r",stdin);
- while(scanf("%d%d",&n,&t)!=EOF){
- flag=true;
- for(i=0;i<n;i++)
- scanf("%d%d",&s[i].l,&s[i].r);
- sort(s,s+n);
- if(s[i=0].l!=1)
- flag=false;
- else
- while(i<n&&s[i].l==1)
- i++;
- ans=1;
- cr=s[--i].r;
- for(;i<n;i++){
- //mm=t<cr+1?t:cr+1;
- mm=cr+1;
- tmax=0;
- for(j=i+1;j<n;j++)
- {
- if(s[j].l<=mm)
- {
- if(s[j].r>=tmax)
- tmax=s[j].r,mid=j;
- }
- else break;
- }
- if(tmax>=mm){ans++;i=mid-1;cr=tmax;}
- }
- if(cr<t)flag=false;
- if(flag)printf("%d/n",ans);
- else printf("-1/n");
- }
- return 0;
- }