当前位置:   article > 正文

蓝桥杯-小B的宿舍Java解法_蓝桥杯java

蓝桥杯java

「小 B 的宿舍」

题目描述

小B的宿舍楼沿着走廊南北向的两边各有200 个房间,如下所示:

  1. [房间1][房间3][房间5][房间7][房间9 ]...[房间399]
  2. ----------------------------------------------
  3. 走廊
  4. ----------------------------------------------
  5. [房间2][房间4][房间6][房间8][房间10]...[房间400]

最近,由于转专业和专业分流的原因,宿舍将迎来新的调整,以便组成新的班级后方便管理。

但是由于走廊狭窄,走廊里只能通过两个搬运的物品(可以同向也可以反向),因此必须指定高效的搬运计划。

老师给了每位同学下达了以下要求,让同学们体现收拾好行李,然后给每位同学 1 分钟的时间搬运。

当从房间 i 搬运行李到 j 时,i 与 j 之间的走廊都会被占用,但是可以容纳两个不同同学同时搬运。所以,10 分钟之内同一段走廊最多两个人同时搬运,不重叠的走廊也可以同时搬运。

小B的老师是个数学老师,经过运筹学一通计算他得到了最优的搬运计划。

虽然计划不唯一,但是最优值唯一,请问这个最短时间是多少?

输入描述
输入数据有 T 组测试例,在第一行给出测试例个数 T。

每个测试例的第一行是一个整数 N(1≤N≤200),表示要搬运行李的人数。

接下来 N 行,每行两个正整数 s 和 t,表示一个人,要将行李是从房间 s 移到到房间t。

输出描述
每组输入都有一行输出数据,为一整数 Time,表示完成任务所花费的最小时间。

示例
输入

  1. 3
  2. 4
  3. 10 20
  4. 30 40
  5. 50 60
  6. 70 80
  7. 2
  8. 1 3
  9. 2 200
  10. 3
  11. 10 100
  12. 20 80
  13. 30 50

输出: 

  1. 10
  2. 10
  3. 20

代码:

  1. import java.io.*;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Set;
  5. import java.util.TreeSet;
  6. public class Main2 {
  7. // 输出流,用于输出结果
  8. static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
  9. // 输入流,用于读取输入数据
  10. static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
  11. static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  12. public static void main(String[] args) throws Exception {
  13. // 读取测试用例的数量
  14. int T = Int();
  15. // 对每个测试用例进行处理
  16. while (T-- > 0) {
  17. // 读取当前测试用例中要搬运行李的人数
  18. int N = Int();
  19. // 创建一个数组用于记录每个房间的搬运任务数量
  20. int[] hostels = new int[401];
  21. // 依次处理每个人的搬运任务
  22. for (int i = 1; i <= N; i++) {
  23. // 读取当前人的搬运任务的起始房间和目标房间
  24. int s = Int();
  25. int t = Int();
  26. // 如果目标房间在起始房间之前,则交换两者的值
  27. if(t < s){
  28. int temp = s;
  29. s = t;
  30. t = temp;
  31. }
  32. // 如果起始房间是偶数,则调整为奇数,因为走廊只能从奇数房间搬运
  33. if (s % 2 == 0) {
  34. s = s - 1;
  35. }
  36. // 如果目标房间是奇数,则调整为偶数,因为走廊只能搬运到偶数房间
  37. if (t % 2 != 0) {
  38. t = t + 1;
  39. }
  40. // 对起始房间到目标房间之间的每个房间进行搬运任务数量的增加
  41. for (int j = s; j <= t; j++) {
  42. hostels[j] += 1;
  43. }
  44. }
  45. // 找到搬运任务数量的最大值
  46. int max = 0;
  47. for (int i = 1; i <= 400; i++) {
  48. if (hostels[i] > max) {
  49. max = hostels[i];
  50. }
  51. }
  52. // 计算最短搬运时间并输出结果
  53. int result = max * 10;
  54. pw.println(result);
  55. }
  56. // 输出结果
  57. pw.flush();
  58. }
  59. // 以下是用于读取输入的辅助函数
  60. // 读取一行输入数据
  61. public static String Line() throws Exception {
  62. String s = br.readLine();
  63. return s;
  64. }
  65. // 读取一个整数输入数据
  66. public static int Int() throws Exception {
  67. st.nextToken();
  68. return (int) st.nval;
  69. }
  70. // 读取一个长整型输入数据
  71. public static Long Long() throws Exception {
  72. st.nextToken();
  73. return (long) st.nval;
  74. }
  75. // 读取一个双精度浮点型输入数据
  76. public static double Double() throws Exception {
  77. st.nextToken();
  78. return st.nval;
  79. }
  80. // 求两个整数的最大公约数
  81. public static int gcd(int a, int b) {
  82. return b == 0 ? a : gcd(b, a % b);
  83. }
  84. // 求两个整数的最小公倍数
  85. public static int clm(int a, int b) {
  86. return a * b / gcd(a, b);
  87. }
  88. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/481105
推荐阅读
相关标签
  

闽ICP备14008679号