本文主要是介绍问题 F: 节目安排,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
假期到了,天宝终于可以无压力的看电视了。但是他喜欢的节目有点多,如何尽可能多的看到完整的节目。
他把喜欢的节目时间表给你,请帮他安排一下吧。
输入
输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示天宝喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。
输出
对于每组输入,输出能完整看到的电视节目的个数。
样例输入 Copy
12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
样例输出 Copy
5
问题分析
这题跟活动选择题几乎一模一样,详细分析见下篇👇
问题 C: 活动选择
那么这题的区别是什么呢?
只要加个多组输入就行
int n;
while(cin>>n) {if(n==0) break;//实现代码
}
哦对了,别忘记当n=0的时候要停止
#include <bits/stdc++.h>
using namespace std;struct Hd{ //这个结构体的名字叫Hdint bi; //存活动开始时间int ei; //存活动结束时间
};bool cmp(const Hd& a,const Hd& b) {return a.ei<b.ei; //按活动结束时间从小到大排序
}int main() {int n;while(cin>>n) {if(n==0) break; //注意题目说当n=0的时候,输入结束vector<Hd> a(n); //这个vector存的是n个Hd类型的活动,也就是每个元素是个结构体for(int i=0;i<n;i++) {cin>>a[i].bi>>a[i].ei; //输入每个活动的开始和结束时间}sort(a.begin(),a.end(),cmp); //对活动进行排序int ans=1; //第一个活动被选择int end=a[0].ei; //第一个活动的结束时间,以后就是存下一个可选活动结束时间for(int i=1;i<n;i++) { //看后续的活动的情况,所以下标是1开始了if(a[i].bi>=end) { //如果当前活动的开始时间大于等于前一个可选活动结束时间ans=ans+1; //说明该活动与前一个可选活动不冲突,可选活动数加1end=a[i].ei; //那么结束时间变为该可选活动结束时间}}cout<<ans<<endl; //输出几个可安排的活动,因为多组输入,记得输出完一组答案换行}
}
这篇关于问题 F: 节目安排的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!