Week3 作业 B - 区间选点 Gym - 270437B

数轴上有 n 个闭区间 [a_i, b_i]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)

Input

第一行1个整数N(N<=100)
第2~N+1行,每行两个整数a,b(a,b<=100)

Output

一个整数,代表选点的数目

Examples
Input

2
1 5
4 6

Output

1

Input

3
1 3
2 5
4 6

Output

2
#include <iostream>
#include <list>
using namespace std;

struct line {
	int start;
	int end;
	line(int s, int e) :start(s), end(e) {
	}
	bool operator<(const line& l2) {
		if (start != l2.start) {
			return start < l2.start;
		}
		return end < l2.end;
	}
};


int main(int argc, char** argv) {
	list<line> lines;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int a, b;
		cin >> a >> b;
		line newline(a, b);
		lines.push_back(newline);
	}
	lines.sort();
	int cmin = 999, cmax = 999, ca = 999, cb = 999, point = 0;
	for (list<line>::iterator it = lines.begin(); it != lines.end(); it++) {
		ca = it->start; cb = it->end;
		if (cmin == 999) {
			cmin = ca; cmax = cb;
			continue;
		}
		if (ca > cmax) { //new point
			point++;
			cmin = ca;
			cmax = cb;
			continue;
		}
		if (cb < cmax) { //change cmax
			cmax = cb;
		}
		cmin = ca; //change cmin

	}
	if (ca != 999)point++;

	cout << point << endl;
	return 0;

}
发布了16 篇原创文章 · 获赞 2 · 访问量 306

猜你喜欢

转载自blog.csdn.net/ziseon/article/details/104812168