高质量题解|活动安排
2026-03-21 11:55:16
发布于:北京
1阅读
0回复
0点赞
题目大意
记录下每次的开始时间和结束时间,定义一开始的可参加活动数量和最后的结束时间,判断能否参加活动
考纲知识点
输入输出、分支结构、算术运算符、结构体基础、结构体排序、自定义函数、基础数据类型、变量的定义以及使用
数据范围
,
解题思路
起始时间和终止时间可以记录在结构体 中,记作起始时间 和终止时间
将结束时间从小到大进行排序
定义一个变量 用来记录当前活动的结束时间,因为前面已经排序了,所以从 开始
定义一个变量 记录可以参加的活动数量,因为无论怎么样我们的第一个活动都是可以参加的,所以变量从 开始
同上,第一个无论怎样都可以参加,所以循环从 开始
如果下一次的开始时间大于上一次 的结束时间,可参加的活动数量增加, 重新定义为当前活动的结束时间
参考程序
#include <bits/stdc++.h>
using namespace std;
struct node{
int s,e;
}a[1001];
bool cmp(node x,node y){
//结束时间,从小到大
return x.e < y.e;
}
int main(){
int n;
cin >> n;
for(int i = 0;i < n;i++){
cin >> a[i].s >> a[i].e;
}
sort(a,a + n,cmp);
int last = a[0].e;//last:记录当前活动的结束时间
int num = 1;//记录可以参加的活动数量
for(int i = 1;i < n;i++){
if(a[i].s >= last){//如果当前活动的开始时间大于等于last,那么活动可以参加,last更新
num++;
last = a[i].e;
}
}
//输出num
cout << num;
return 0;
}
时间复杂度
(线性时间复杂度)
空间复杂度
(常数空间复杂度)
这里空空如也








有帮助,赞一个