当前位置:   article > 正文

PTA 会议安排C++_学校的礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一

学校的礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一

学校的礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。

输入格式:

第一行是一个整型数m(m<100)表示共有m组测试数据
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)

输出格式:

对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行

输入样例:

在这里给出一组输入。例如:

  1. 2
  2. 2
  3. 1 10
  4. 10 11
  5. 3
  6. 1 10
  7. 9 11
  8. 11 20

输出样例:

在这里给出相应的输出。例如:

2
2

思路:1)从结束时间早的开始排会议

           2) 排序

tips:数组定义为meetting[10000],否则数组溢出(段错误)

  1. #include<algorithm>//sort函数头文件头文件
  2. #include <iostream>
  3. using namespace std;
  4. struct node {//定义结构体数组,存放会议开始、结束时间
  5. int star;
  6. int end;
  7. }meetting[10001];
  8. //对结构体数组里面的结束时间按从小到大排序
  9. int cmp(node a, node b) {
  10. return a.end < b.end;
  11. }
  12. int main() {
  13. int t, n, sum = 0;//组数、会议个数、会议计数
  14. cin >> t;
  15. while (t--)
  16. {
  17. cin >> n;
  18. for (int i = 1; i <= n; i++)
  19. {
  20. cin >> meetting[i].star;
  21. cin >> meetting[i].end;
  22. }
  23. //时间按从小到大排序
  24. sort(meetting + 1, meetting + 1 + n, cmp);
  25. //从结束时间最小的为第一个会议
  26. int time = meetting[1].end;
  27. sum = 1;
  28. for (int i = 2; i <= n; i++)
  29. {
  30. //下一个会议开始大于等于上一个的结束时间
  31. if (time <= meetting[i].star)
  32. {
  33. sum++;
  34. time = meetting[i].end;
  35. }
  36. }
  37. cout << sum << endl;
  38. }
  39. return 0;
  40. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/182094
推荐阅读
相关标签
  

闽ICP备14008679号