Advertisement
StreetKatya

Пакеты

May 15th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. Skip to content
  2. Sign up
  3. int28h
  4. /
  5. JavaTasks
  6. 1811
  7. Code
  8. Issues
  9. Pull requests
  10. Actions
  11. Projects
  12. Wiki
  13. Security
  14. Insights
  15. JavaTasks/src/stepik-algorithms-structures/packages.java /
  16. @int28h
  17. int28h Стек с максимумом и обработка пакетов
  18. Latest commit 9b61d7b on 14 Apr 2018
  19. History
  20. 1 contributor
  21. 78 lines (66 sloc) 4.07 KB
  22.  
  23. /*
  24. Ваша цель - реализовать симулятор обработки сетевых пакетов. Для i-го пакета известно время его поступления arrival[i],
  25. а также время duration[i], необходимое на его обработку.
  26. В вашем распоряжении имеется один процессор, который обрабатывает пакеты в порядке их поступления. Если процессор
  27. начинает обрабатывать пакет i (что занимает время duration[i]), он не прерывается и не останавливается до тех пор,
  28. пока не обработает пакет.
  29. У компьютера, обрабатывающего пакеты, имеется сетевой буфер размера size. До начала обработки пакеты хранятся в буфере.
  30. Если буфер полностью заполнен в момент поступления пакета (есть size пакетов, поступивших ранее, которые до сих пор
  31. не обработаны), этот пакет отбрасывается и уже не будет обработан. Если несколько пакетов поступает в одно и то же время,
  32. они все будут сперва сохранены в буфер (несколько последних из них могут быть отброшены, если буфер заполнится).
  33. Компьютер обрабатывает пакеты в порядке их поступления. Он начинает обрабатывать следующий пакет из буфера сразу после того,
  34. как обработает текущий пакет. Компьютер может простаивать, если все пакеты уже обработаны и в буфере нет пакетов.
  35. Пакет освобождает место в буфере сразу же, как компьютер заканчивает его обработку.
  36. Формат ввода.
  37. Первая строка входа содержит размера буфера size и число пакетов n.
  38. Каждая из следующих n строк содержит два числа: время arrival[i] прибытия i-го пакета и время duration[i],
  39. необходимое на его обработку.
  40. Гарантируется, что arrival[1] <= arrival[2] <= ... <= arrival[n].
  41. При этом может оказаться, что arrival[i-1] = arrival[i]. В таком случае считаем, что пакет i-1 поступил раньше пакета i.
  42. Формата вывода.
  43. Для каждого из n пакетов выведите время, когда процессор начал его обрабатывать, или -1, если пакет был отброшен.
  44. Sample Input 1:
  45. 1 0
  46. Sample Output 1:
  47. (если пакетов нет, ничего не выводится)
  48. Sample Input 2:
  49. 1 1
  50. 0 0
  51. Sample Output 2:
  52. 0
  53. Sample Input 3:
  54. 1 1
  55. 0 1
  56. Sample Output 3:
  57. 0
  58. */
  59. import java.util.Queue;
  60. import java.util.Scanner;
  61. import java.util.concurrent.LinkedBlockingQueue;
  62.  
  63. public class Packages {
  64. public static void main(final String[] args) throws Exception {
  65. Scanner in = new Scanner(System.in);
  66.  
  67. int size = in.nextInt();
  68. int packagesCount = in.nextInt();
  69.  
  70. int cpuTime = 0;
  71.  
  72. Queue<Integer> queue = new LinkedBlockingQueue<>(size);
  73.  
  74. for(int i = 0; i < packagesCount; i++) {
  75. int arrival = in.nextInt();
  76. int duration = in.nextInt();
  77.  
  78. while (!queue.isEmpty() && queue.peek() <= arrival) {
  79. queue.poll();
  80. }
  81.  
  82. if(cpuTime < arrival) {
  83. System.out.println(arrival);
  84. cpuTime = arrival + duration;
  85. queue.add(cpuTime);
  86. } else if(queue.size() < size) {
  87. System.out.println(cpuTime);
  88. cpuTime += duration;
  89. queue.add(cpuTime);
  90. } else {
  91. System.out.println(-1);
  92. }
  93. }
  94. }
  95. }
  96. © 2021 GitHub, Inc.
  97. Terms
  98. Privacy
  99. Security
  100. Status
  101. Docs
  102. Contact GitHub
  103. Pricing
  104. API
  105. Training
  106. Blog
  107. About
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement