POJ2376_Cleaning Shifts_C++

  題目:http://poj.org/problem?id=2376html

 

  英文題強行看不懂,只看的懂輸入輸出,輸入n,m,下接n行每行一個區間兩個數左端點 l,有端點 rios

  給出n個閉區間,求選擇最少的區間可以徹底覆蓋[1,m]spa

  經典的區間覆蓋問題,按左端點升序排序code

  首先當前卡點爲1,選擇小於等於當前卡點的,儘可能往右邊擴htm

  直到大於當前卡點,再將卡點設爲右邊能擴展到的最大值blog

  統計答案,注意閉區間和左端點最小區大於 1 的狀況
排序

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<ctime>
 8 #include<queue>
 9 #include<stack>
10 #define fre(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
11 typedef long long LL;
12 typedef double db;
13 using namespace std;
14 
15 const int oo=2147483647,TL=980,N=25001;
16 struct line
17 {
18     int l,r;
19 }
20     a[N];
21 inline bool cmp(line x,line y)
22 {
23     return x.l<y.l;
24 }
25 int main()
26 {
27     int n,m,i,k,x,ans=0,j;
28     scanf("%d%d",&n,&m);
29     for (i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);
30     sort(a+1,a+1+n,cmp);
31     for (k=x=i=j=1;i<=n;j=i)
32     {
33         while (a[i].l<=k&&i<=n&&x<m) x=max(x,a[i++].r);
34         ans++;
35         if ((k=x+1)>m||i==j) break;
36     }
37     printf("%d\n",k<=m?-1:ans);
38     return 0;
39 }

  原本覺得水貪心能夠一邊A,結果交了七八遍全WAget

  就到網上去下標程拍,修改了2次以後把標程給拍WA了,本身A掉了(233333333333)string

  網上的題解也是錯的一大片啊~歡迎 Hackit

 

 

 

版權全部,轉載請聯繫做者,違者必究

聯繫方式:http://www.cnblogs.com/hadilo/p/5932395.html

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息