Interval Intersections
Time Limit: 1000 MS Memory Limit: 65536 Kb |
Total Submission: 484 Accepted: 178 |
Description
给定x 轴上n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。给定n 个闭区间,编程计算去掉的最少闭区间数。
Input
多组测试数据。每组测试数据第一行是正整数n(n≤100),表示闭区间数。接下来的n行中,每行有2 个整数,分别表示闭区间的2个端点。
Output
输出每组测试数据的去掉的最小区间数,每组测试数据输出单独一行。
Sample Input
3
10 20
10 15
20 15
Sample Output
2
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
const int MAXN = 100 + 10;
int start[MAXN], finish[MAXN];
int main()
{
int n;
while(cin >> n)
{
memset(start, 0, sizeof start);
memset(finish, 0, sizeof finish);
for(int i = 0; i < n; i++)
{
cin >> start[i];
cin >> finish[i];
if(start[i] > finish[i])
swap(start[i], finish[i]);
}
int cnt;
int selected;
for(int i = 0; i < n; i++)
{
for(int j = 0; j + 1 < n; j++)
{
if(finish[j] > finish[j + 1])
{
swap(finish[j], finish[j + 1]);
swap(start[j], start[j + 1]);
}
}
}
selected = 0;
cnt = 1;
for(int i = 1; i < n; i++)
{
if(start[i] > finish[selected])
{
selected = i;
cnt++;
}
}
cout << (n - cnt) << endl;
}
return 0;
}
(贪心算法)