http://poj.org/problem?id=2376ide
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 12604 | Accepted: 3263 |
Descriptionspa
Inputcode
Outputblog
Sample Inputip
3 10 1 7 3 6 6 10
Sample Outputci
2
Hintinput
1 3 10 //3表明小區間個數,10表明大區間長度。 2 1 5 3 6 8 4 9 10
上面的數據個人程序輸出的是:-1it
由於有兩個區間沒有「徹底覆蓋」,[5 ,6]和[8 ,9]。io
可是正確答案是 3 。event
WA代碼:
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 struct P 5 { 6 int x,y; 7 bool operator < (const P & p) const 8 { 9 return x < p.x || (x == p.x && y > p.y); 10 } 11 }a[25010]; 12 13 int main() 14 { 15 int n,t; 16 while(~scanf("%d %d",&n,&t)) 17 { 18 for(int i = 0;i < n;i++) 19 scanf("%d %d",&a[i].x,&a[i].y); 20 sort(a ,a + n); 21 int res = 1,s; 22 if(a[0].x > 1) 23 printf("-1\n"); 24 else 25 { 26 s = a[0].y; 27 for(int i = 1;i < n && s < t;) 28 { 29 int tmp = 0; 30 while(i < n && a[i].x <= s) 31 { 32 tmp = max(tmp , a[i].y); 33 i++; 34 } 35 if(tmp > s) 36 { 37 s = tmp; 38 res++; 39 } 40 else 41 break; 42 } 43 } 44 if(s >= t) 45 printf("%d\n",res); 46 else 47 printf("-1\n"); 48 } 49 return 0; 50 }
AC代碼:
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 5 struct P{ 6 int x,y; 7 bool operator < (const P & p) const { 8 return x < p.x || (x == p.x && y > p.y); 9 } 10 }a[25010]; 11 12 int main() { 13 int n,t; 14 while(~scanf("%d %d",&n,&t)) { 15 for(int i = 0;i < n;i++) 16 scanf("%d %d",&a[i].x,&a[i].y); 17 18 sort(a ,a + n); 19 20 int res = 1,s; 21 if(a[0].x > 1) { 22 printf("-1\n"); 23 continue; 24 } else { 25 s = a[0].y; 26 for(int i = 1;i < n && s < t;) { 27 int tmp = 0; 28 while(i < n && a[i].x <= s + 1) { 29 tmp = max(tmp , a[i].y); 30 i++; 31 } 32 if(tmp > s) { 33 s = tmp; 34 res++; 35 } else break; 36 } 37 } 38 39 if(s >= t) { 40 printf("%d\n",res); 41 } else { 42 printf("-1\n"); 43 } 44 } 45 return 0; 46 }