poj2376
2016-07-05 23:17
351 查看
这道题目首先输入要是scanf,但是我用了scanf之后一度TLE以至于怀疑人生,后来发现是while循环的条件疏漏使得有些条件下会永远TLE,不是输入的鬼。。
后来几经修改觉得没问题了,但是就是WA,后来发现自己在调试TLE的问题的时候把sort关了。。sort一开就AC了。。。
Test:
按照开始时间进行排序,由于题目的意思,似乎比如说两头牛,第一头1-3 第二头4-6都是可以的。所以在循环中,finish表示t=finish之前的都可以顺利工作完成,然后下一头牛从
finish+1开始。如果finish没有更新,那么意味着不能继续连续工作,输出-1。
如果牛都完了,finish还没到T,输出-1。
如果提前结束了,也就是finish>=T,那么就提前输出就好。
后来几经修改觉得没问题了,但是就是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; }
相关文章推荐
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1001
- POJ ACM 1002
- 1611:The Suspects
- POJ1089 区间合并
- POJ 2159 Ancient Cipher
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- [数论]poj2635__The Embarrassed Cryptographer
- [二分图匹配]poj2446__Chessboard
- POJ1050 最大子矩阵和
- 用单调栈解决最大连续矩形面积问题