赞
踩
学校的礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行
在这里给出一组输入。例如:
- 2
- 2
- 1 10
- 10 11
- 3
- 1 10
- 9 11
- 11 20
在这里给出相应的输出。例如:
2
2
思路:1)从结束时间早的开始排会议
2) 排序
tips:数组定义为meetting[10000],否则数组溢出(段错误)
- #include<algorithm>//sort函数头文件头文件
- #include <iostream>
- using namespace std;
-
- struct node {//定义结构体数组,存放会议开始、结束时间
- int star;
- int end;
- }meetting[10001];
-
- //对结构体数组里面的结束时间按从小到大排序
- int cmp(node a, node b) {
- return a.end < b.end;
- }
-
- int main() {
- int t, n, sum = 0;//组数、会议个数、会议计数
- cin >> t;
-
- while (t--)
- {
- cin >> n;
- for (int i = 1; i <= n; i++)
- {
- cin >> meetting[i].star;
- cin >> meetting[i].end;
- }
- //时间按从小到大排序
- sort(meetting + 1, meetting + 1 + n, cmp);
- //从结束时间最小的为第一个会议
- int time = meetting[1].end;
- sum = 1;
- for (int i = 2; i <= n; i++)
- {
- //下一个会议开始大于等于上一个的结束时间
- if (time <= meetting[i].star)
- {
- sum++;
- time = meetting[i].end;
- }
- }
- cout << sum << endl;
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。