1. 程式人生 > >貪心——整數區間

貪心——整數區間

問題 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;
}