当前位置:   article > 正文

L2-042 老板的作息表 & L1-088 静静的推荐_gplt老板的作息表

gplt老板的作息表

输入格式:

输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:

hh:mm:ss - hh:mm:ss

其中 hhmmss 分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:00 到 23:59:59);每个区间间隔至少 1 秒;并且任意两个给出的时间区间最多只在一个端点有重合,没有区间重叠的情况。

输出格式:

按照时间顺序列出时间表中没有出现的区间,每个区间占一行,格式与输入相同。题目保证至少存在一个区间需要输出。

输入样例:

  1. 8
  2. 13:00:00 - 18:00:00
  3. 00:00:00 - 01:00:05
  4. 08:00:00 - 09:00:00
  5. 07:10:59 - 08:00:00
  6. 01:00:05 - 04:30:00
  7. 06:30:00 - 07:10:58
  8. 05:30:00 - 06:30:00
  9. 18:00:00 - 19:00:00

输出样例:

  1. 04:30:00 - 05:30:00
  2. 07:10:58 - 07:10:59
  3. 09:00:00 - 13:00:00
  4. 19:00:00 - 23:59:59

当时见到望而却步,当时觉得处理不了输入和输出,排序也没想到( - 前后有空格呀!。。。)

 第一个用结构体,第二个用 vector  pair 第三个 在第二个的基础上优化下

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct T
  4. {
  5. string l,r;
  6. };
  7. bool cmp(T t1, T t2)
  8. {
  9. return t1.l < t2.l;
  10. }
  11. int main()
  12. {
  13. int n;
  14. cin >> n;
  15. string a, b,c;
  16. vector<T> v;
  17. while (n--)
  18. {
  19. cin >> a >> c >> b;
  20. T t;
  21. t.l = a; t.r = b;
  22. v.push_back(t);
  23. }
  24. sort(v.begin(), v.end(),cmp);
  25. if (v[0].l != "00:00:00") cout << "00:00:00" << " - " << v[0].l<<endl;
  26. for (int i = 0;i < v.size()-1;i++)
  27. {
  28. if (v[i].r != v[i + 1].l) cout << v[i].r << " - " << v[i + 1].l << endl;
  29. }
  30. if (v[v.size() - 1].r != "23:59:59")
  31. cout<< v[v.size() - 1].r << " - " << "23:59:59";
  32. system("pause");
  33. }
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. cin >> n;
  7. string a, b,c;
  8. pair<string, string> p;
  9. vector<pair<string,string>> v;
  10. while (n--)
  11. {
  12. cin >> a >> c >> b;
  13. p = make_pair(a, b);
  14. v.push_back(p);
  15. }
  16. sort(v.begin(), v.end());
  17. if (v[0].first != "00:00:00") cout << "00:00:00" << " - " << v[0].first <<endl;
  18. for (int i = 0;i < v.size()-1;i++)
  19. {
  20. if (v[i].second!= v[i + 1].first)
  21. cout << v[i].second << " - " << v[i + 1].first << endl;
  22. }
  23. if (v[v.size() - 1].second != "23:59:59")
  24. cout<< v[v.size() - 1].second << " - " << "23:59:59";
  25. system("pause");
  26. }

 

  1. #include<bits/stdc++.h>
  2. #include<utility>
  3. using namespace std;
  4. int main()
  5. {
  6. int n;
  7. cin >> n;
  8. vector<pair<string,string>> v;
  9. while (n--)
  10. {
  11. string a, b,c;
  12. cin >> a >> c >> b;
  13. v.push_back({a,b});
  14. }
  15. v.push_back({"","00:00:00"});
  16. v.push_back({"23:59:59",""});
  17. sort(v.begin(), v.end());
  18. for (int i = 0;i < v.size()-1;i++)
  19. {
  20. if(v[i].second!=v[i+1].first)
  21. cout<<v[i].second<<" - "<<v[i+1].first<<endl;
  22. }
  23. }

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:

  • 只考虑得分不低于 175 分的学生;
  • 一共接受 K 批次的推荐名单;
  • 同一批推荐名单上的学生的成绩原则上应严格递增;
  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?

输入格式:

输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。

随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。

输出格式:

在一行中输出静静姐最多能向企业推荐的学生人数。

输入样例:

  1. 10 2 90
  2. 203 0
  3. 169 91
  4. 175 88
  5. 175 0
  6. 175 90
  7. 189 0
  8. 189 0
  9. 189 95
  10. 189 89
  11. 256 100

输出样例:

8

样例解释:

第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。


考试的时候直接傻眼,今天再看,还是没能一下子抓住问题的关键。以后做题先多去理解题意了!本来想着拿结构体做或者deque pair这样的去做,发现进展不了呀,对问题继续理解。其实就是记录每个分数的人数 和 超过pta面试分数线的人数(如果这个分数下 有人超过面试分数,那么他就可以带走一个没过分数线的人,只需细化分一下各个情况)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[310],b[310];//a记录该分数下的人数,b记录过面试分数线的人数
  4. int main()
  5. {
  6. int n, k, s;
  7. cin >> n >> k >> s;
  8. int x, y;
  9. while (n--)
  10. {
  11. cin >> x >> y;
  12. a[x]++;
  13. if(y>=s) b[x]++;
  14. }
  15. int ans = 0;
  16. while (k--)
  17. {
  18. for (int i = 175;i <= 305;i++)
  19. {
  20. if (b[i] && a[i] > b[i]) {
  21. ans += b[i] + 1;
  22. a[i] = a[i] - b[i] - 1;
  23. b[i] = 0;
  24. }
  25. else if (b[i] && a[i] == b[i]) {
  26. ans += b[i];
  27. a[i] = b[i] = 0;
  28. }
  29. else if (!b[i] && a[i]) ans++,a[i]--;
  30. }
  31. }
  32. cout << ans;
  33. system("pause");
  34. }

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

闽ICP备14008679号