武汉ACM集训——贪心-2
题解
根据题目可知,如果想要参加一场比赛之后参加越多的比赛,则这场比赛的结束时间要越早。
将比赛按照结束时间升序排序,遍历选择开始时间在上次比赛结束时间之后的比赛。
AC代码
#include <bits/stdc++.h>
using namespace std;
// 存比赛时间
struct s
{
int a, b;
s(int x, int y) : a(x), b(y) {}
// 重载小于号
bool operator<(const s &B) const
{
return b < B.b;
}
};
vector<s> ans;
int main()
{
int n;
scanf("%d", &n);
int x, y;
for (int i = 1; i <= n; ++i)
{
scanf("%d%d", &x, &y);
ans.push_back(s(x, y));
}
// 排序
sort(ans.begin(), ans.end());
// 遍历选择
int tmp = 0, sum = 1;
tmp = ans[0].b;
for (int i = 1; i < ans.size(); ++i)
{
if (ans[i].a >= tmp)
{
tmp = ans[i].b;
sum++;
}
}
printf("%d", sum);
return 0;
}