您的位置:首页 > 其它

poj2376

2016-07-05 23:17 351 查看
这道题目首先输入要是scanf,但是我用了scanf之后一度TLE以至于怀疑人生,后来发现是while循环的条件疏漏使得有些条件下会永远TLE,不是输入的鬼。。

后来几经修改觉得没问题了,但是就是WA,后来发现自己在调试TLE的问题的时候把sort关了。。sort一开就AC了。。。

Test:

input:
10 10
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 10
9 10
10 10

output:
4


按照开始时间进行排序,由于题目的意思,似乎比如说两头牛,第一头1-3 第二头4-6都是可以的。所以在循环中,finish表示t=finish之前的都可以顺利工作完成,然后下一头牛从

finish+1开始。如果finish没有更新,那么意味着不能继续连续工作,输出-1。

如果牛都完了,finish还没到T,输出-1。

如果提前结束了,也就是finish>=T,那么就提前输出就好。

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define MAXLEN 25000
pair<int , int> P[MAXLEN];

int N,T;
//int S[MAXLEN],F[MAXLEN];

int main(int argc, const char * argv[]) {
scanf("%d%d",&N,&T);
for(int i=0;i<N;i++){
//scanf("%d%d",&S[i],&F[i]);
//P[i].first = S[i];
//P[i].second = F[i];
scanf("%d%d",&P[i].first,&P[i].second);
}
sort(P,P+N);
int index = 0;
int count = 0;
int finish = 0;
while(index<N && finish <T){
int tmp = finish;
//cout<<finish<<' ';
while(index<N && P[index].first<=(finish+1)){
tmp = max(tmp,P[index++].second);
}
if(tmp==finish){
printf("-1\n");
return 0;
}
//cout<<tmp<<endl;
finish = tmp;
//cout<<finish<<endl;
++count;
if(finish>=T)break;
}
if(finish>=T)
printf("%d\n",count);
else
printf("-1\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj