清洁轮班-----坑死我了

农夫约翰正在分配他的一些牛(1<=N<=25,000)在谷仓周围做一些清洁工作。他总是希望有一只牛在清理东西,并把一天分成T班(1<=T<=1 000 000),第一次是轮班1,最后一次是轮班T。

每头奶牛只能在白天的某一段时间内进行清洁工作。任何被挑选来做清洁工作的母牛都会在整个时间间隔内工作。

你的工作是帮助农夫约翰分配一些牛来轮班,这样(一)每班至少有一头牛被分配给它,和(二)尽可能少的奶牛参与清洁。如果不可能为每班分配一头牛,请打印-1。

输入

*第1行:两个空格分隔的整数:n和T

*第2行.N+1:每一行都包含奶牛可以工作的间隔的开始和结束时间。母牛在开始时开始工作,在结束时间后结束工作。

输出量

*第1行:农场主约翰需要雇用的牛的最低数量,或-1,如果不可能为每班分配一头牛。

样本输入

3 10
1 7
3 6
6 10

样本输出

2

暗示

这个问题有大量的输入数据,使用scanf()代替CIN来读取数据,以避免超过时间限制。

输入详情:

有3头母牛和10班轮班。牛#1可以工作1.7,牛#2可以工作3.6,牛#3可以工作6.10。

产出详情:

通过选择牛#1和#3,所有的轮班都包括在内。没有办法用不到两头牛来覆盖所有的轮班。

 

#include
#include
using namespace std;
struct node{long long st;long long end;
}cow[25010];int cmp(struct node a,struct node b){if(a.st>b.st)return 0;else if(a.stcow[j].st){struct node t=cow[i];cow[i]=cow[j];cow[j]=t;}if(cow[i].st==cow[j].st&&cow[i].end>cow[j].end){struct node t=cow[i];cow[i]=cow[j];cow[j]=cow[i];}}}*/    //加注释部分排序错误 long long stop,big=0,i=0;while(ibig)big=cow[i].end;i++;}//如果big>stop,说明此牛可行;如果不可行,之后再也不会进入内层的while循环if(big>=stop){  count++;if(big>=T){break;}i--;//缓冲一下内层while循环的最后的i++;}i++;}if(big>=T)printf("%d\n",count);else printf("-1\n");return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部