1624: 安排电视节目(PIPIPOJ)
题目描述
PIPI在电视台工作,他今天要安排一些电视节目的播放顺序。
其中可能有一些电视节目在时间上是冲突的,因此PIPI需要放弃一些节目。
请问PIPI最少需要放弃多少个节目才能使得剩下的节目没有冲突。
每个电视节目有一个开始时间和一个结束时间,一个节目结束后可以立即播放下一个节目。
输入
多组输入。
第一行输入节目数量n(1<=n<=1e5)。
接下来n行输入每个节目的开始时间和结束时间。
输出
对于每组输入,输出需要放弃节目的最少数量。
样例输入
3
1 3
2 5
3 6
3
1 1
1 1
1 1
3
-100000 1
-100000 100
-1000000 -1000
样例输出
1
0
2
题解1(C++版本)
cpp
#include <bits/stdc++.h>
using namespace std;
struct Show {
int l, r;
} a[100005];
bool cmp(Show x, Show y) {
return x.r < y.r; // 按结束时间升序,无需额外判断
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%d%d", &a[i].l, &a[i].r);
}
sort(a, a + n, cmp);
int cnt = 0;
int lastR = -1e9; // 初始化为-1e9,兼容所有非负时间
for (int i = 0; i < n; i++) {
if (a[i].l >= lastR) {
cnt++;
lastR = a[i].r;
}
}
printf("%d\n", n - cnt);
}
return 0;
}