貪心——整數區間
阿新 • • 發佈:2018-12-23
問題 F: 【例6.6】整數區間
時間限制: 1 Sec 記憶體限制: 128 MB題目描述
請程式設計完成以下任務:
1.從檔案中讀取閉區間的個數及它們的描述;
2.找到一個含元素個數最少的集合,使得對於每一個區間,都至少有一個整數屬於該集合,輸出該集合的元素個數。
輸入
首行包括區間的數目n,1≤n≤10000,接下來的n行,每行包括兩個整數a,b,被一空格隔開,0≤a≤b≤10000,它們是某一個區間的開始值和結束值。輸出
第一行集合元素的個數,對於每一個區間都至少有一個整數屬於該區間,且集合所包含元素數目最少。樣例輸入
4
3 6
2 4
0 2
4 7
樣例輸出
2
提示
#include<iostream> using namespace std; struct qj { int begin; int end; }a[1000]; int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i].begin>>a[i].end; } int temp; for(int i=0;i<n;i++)//根據區間終點從小到大排序 for(int j=1;j<n-i;j++) { if(a[j-1].end>a[j].end) { temp=a[j-1].end; a[j-1].end=a[j].end; a[j].end=temp; temp=a[j-1].begin; a[j-1].begin=a[j].begin; a[j].begin=temp; } } int ans=1,end_time=a[0].end; for(int i=1;i<n;i++) { if(a[i].begin>end_time)//當遇到區間與公共區間沒有交點即區間開頭不在公共區間內 { ans++;//區間數+1 end_time=a[i].end;//更新公共區間結尾 } } cout<<ans<<endl; return 0; }