uva 10020 Minimal coverage(貪心,區間覆蓋)

來源:互聯網
上載者:User

標籤:

這道題一讀就是經典的區間問題,是區間覆蓋,敲過之後還有花了很長的調試時間,還是我不熟練,現在做題確實挺慢

的,簡單題目也要做好久,沒事,慢慢來。最重要的要確保正確率和心態問題,認真對待,調試找到了好多bug,一些

細節問題。。。都是剛開始沒有注意到的。交了之後RE,在數組上多加了兩個0。A了,,uva老是不提示資料有多大,

所以只能亂開。。。

思路:

先對區間按左邊的點進行排序,如果當前需要涵蓋的區間為[x,y],那麼在排序的區間中到左邊小於x,右

邊最大的那個區間,設為Max,然後更新想找的區間為[Max,m],依次類推,知道沒有小於x的區間或者最大值已經大

於了m。。

貼代碼:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;struct node{int x,y;}a[500005],b[500005];int cmp(const void *a,const void *b){if(((node *)a)->x == ((node *)b)->x)return ((node *)b)->y - ((node *)b)->y;return ((node *)a)->x - ((node *)b)->x;}int main(){int T,i,m,x,y;cin >> T;while(T--){cin >> m;i = 1;while(cin >> x >> y,x||y){a[i].x = x;a[i].y = y;i++;}int s = i-1; qsort(a+1,s,sizeof(a[0]),cmp);//for(i=1; i<=s; i++)//cout << a[i].x << " " << a[i].y << endl;int cnt = 0;int flag = 0;int k=1;int flag1 = 0;int Max = 0;int Max1;for(i=1; i<=s; i++){if(a[i].x <= cnt){if(Max <= a[i].y){Max = a[i].y;Max1 = a[i].x;}flag = 1;if(i!=s)continue;} if(i != s)i--;//cout << " i= " << i << endl;if(flag == 0){break;}b[k].x = Max1;b[k].y = Max;//cout << a[i].x << a[i].y << endl;k++;cnt = Max;flag = 0;if(cnt >= m){flag1 = 1;break;}}if(flag1){cout << k-1 << endl;for(i=1; i<k; i++){cout << b[i].x << " " << b[i].y <<endl; }}else{cout << '0' << endl;}if(T)cout << endl;} return 0;}


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

uva 10020 Minimal coverage(貪心,區間覆蓋)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.