Advertisement
HeatPulse

Lab8-2 Black Friday

Dec 11th, 2019
2,462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.88 KB | None | 0 0
  1. Black Friday Problem 2 (0 / 0)
  2. Еден маркет за бела технка одлучил да ги спушти цените на своите производи еден работен петок дури до 80% по повод престојните Божикни празници. Поради оваа промоција јасно им било дека ќе има многу заинтересирани купувачи, па затоа одлучиле да воспостaват ред при влеувањето/излегувањето во маркетот. Купувачите влегуваат според времето на пристигнување. Потребно е да се пронајде колкав е максималниот број на купувачи кои ќе бидат присутни во маркетот. Во првата линија е даден бројот на купувачи кои чекаат да влезат, N. Секоја од наредните линии го означува часот и минутите на доаѓање на купувачот, како и колку време (во минути) ќе се задржи во маркетот, во формат: HH:MM d
  3.  
  4. За да се реализира оваа задача потребно е да се користи соодветна податочна структура со која со најмала сложеност ќе се постигне бараниот резултат. Притоа е обезбедено да не може да се случи во ист момент да има влегување односно излегување од маркетот. Маркетот работи до 23:59.
  5.  
  6. На излез треба да се испечати максималниот број купувачи кои што истовремено ќе бидат присутни во маркетот.
  7.  
  8. Име на класа во Java: BlackFriday
  9. import java.io.BufferedReader;
  10. import java.io.IOException;
  11. import java.io.InputStreamReader;
  12.  
  13. public class BlackFriday {
  14.  
  15. public static void main(String[] args) throws NumberFormatException, IOException {
  16.  
  17. BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  18. int n = Integer.parseInt(bf.readLine());
  19.  
  20. Heap<Buyer> priorityQueue = new Heap<>(n);
  21.  
  22. for(int i=0;i<n;i++) {
  23. String[] parts = bf.readLine().split(" ");
  24. priorityQueue.insert(new Buyer(parts[0],Integer.parseInt(parts[1])));
  25. }
  26.  
  27. int br = 1;
  28. int max = 0;
  29. for(int i=0;i<n-1;i++) {
  30. Buyer b = priorityQueue.removeMax();
  31. for(int j=0;j<priorityQueue.getSize();j++) {
  32. if(b.inTheSameTime(priorityQueue.getAt(j)))
  33. br++;
  34. }
  35. max = Math.max(max, br);
  36. br = 1;
  37. }
  38. System.out.println(max);
  39. }
  40.  
  41. }
  42.  
  43. class Buyer implements Comparable<Buyer>{
  44. private int timeOfEntryInMinutes;
  45. private int timeInside; // minutes
  46.  
  47. public static int MAX_ENTRY_TIME = 1439; // in minutes
  48.  
  49. public Buyer(String timeOfEntry, int timeInside) {
  50. String[] parts = timeOfEntry.split(":");
  51. // minutite koga vlegol + casot * 60 = vkupno vreme vo minuti koga vlegol
  52. this.timeOfEntryInMinutes = Integer.parseInt(parts[1]) + (Integer.parseInt(parts[0]) * 60);
  53. this.timeInside = timeInside;
  54. // resavanje na problemot ako nekoj saka da sede posle zatvaranje
  55. if(timeOfEntryInMinutes + timeInside > MAX_ENTRY_TIME) {
  56. this.timeInside -= (timeOfEntryInMinutes + timeInside) - MAX_ENTRY_TIME;
  57. }
  58. }
  59.  
  60. @Override
  61. public int compareTo(Buyer arg0) { // najgolem prioritet ima onoj koj prv ke izleze
  62. return -((timeOfEntryInMinutes + timeInside) - (arg0.timeOfEntryInMinutes + arg0.timeInside));
  63. }
  64.  
  65. public boolean inTheSameTime(Buyer other) {
  66. // ako vremeto na izleguvanje na this e pogolemo od vremeto na vleguvanje na other,
  67. //togash se vo dukanot vo isto vreme
  68. if((timeOfEntryInMinutes + timeInside) >= (other.timeOfEntryInMinutes))
  69. return true;
  70. return false;
  71. }
  72. }
  73.  
  74. class Heap<E extends Comparable<E>> {
  75. private E[] elements;
  76. private int size;
  77.  
  78. // go zgolemuvame za 1, bidejki indeksot pocnuva od 0
  79. public int getParent(int i) {
  80. return (i+1)/2-1;
  81. }
  82.  
  83. public int getLeft(int i) {
  84. return ((i+1)*2)-1;
  85. }
  86.  
  87. public int getRight(int i) {
  88. return (i+1)*2;
  89. }
  90. // go zgolemuvame za 1, bidejki indeksot pocnuva od 0
  91.  
  92. public E getAt(int i) {
  93. return elements[i];
  94. }
  95.  
  96. public void setElement(int index, E insert) {
  97. elements[index] = insert;
  98. }
  99.  
  100. public void swap(int i, int j) {
  101. E tmp = elements[i];
  102. elements[i] = elements[j];
  103. elements[j] = tmp;
  104. }
  105.  
  106. public void buildMaxHeap() {
  107. for(int i = elements.length/2-1;i>=0;i--)
  108. adjustMax(i, size);
  109. }
  110.  
  111. private void adjustMax(int i, int n) {
  112. if(i >= n) return;
  113. int left = getLeft(i);
  114. int right = getRight(i);
  115. int max = i;
  116.  
  117. if((left < n)&&elements[left].compareTo(elements[max]) > 0)
  118. max = left;
  119. if((right < n) && elements[right].compareTo(elements[max]) > 0)
  120. max = right;
  121. if(max == i)
  122. return;
  123.  
  124. swap(i, max);
  125. adjustMax(max,n);
  126. }
  127.  
  128. public void buildMinHeap() {
  129. for(int i = elements.length/2-1;i>=0;i--)
  130. adjustMin(i, size);
  131. }
  132.  
  133. private void adjustMin(int i, int n) {
  134. if(i >= n) return;
  135. int left = getLeft(i);
  136. int right = getRight(i);
  137. int min = i;
  138.  
  139. if((left < n) && elements[left].compareTo(elements[min]) < 0)
  140. min = left;
  141. if((right < n) && elements[right].compareTo(elements[min]) < 0)
  142. min = right;
  143. if(min == i)
  144. return;
  145.  
  146. swap(i, min);
  147. adjustMin(min,n);
  148. }
  149.  
  150.  
  151. public Heap(E[] arr) {
  152. this.elements = arr;
  153. this.size = arr.length;
  154. }
  155.  
  156. public void heapSort() {
  157. buildMaxHeap();
  158. for(int i=size;i>1;i--) {
  159. swap(0, i-1);
  160. adjustMax(0, i-1);
  161. }
  162.  
  163. }
  164.  
  165. // prioritetna redica implmentacija, el so max prioritet e na prva pozicija
  166. // so sekoj insert ili delete na element se adjust heap-ot, za max prioritet da
  167. // ostane na prva pozicija
  168.  
  169. @SuppressWarnings("unchecked")
  170. public Heap(int size) {
  171. this.size = 0;
  172. this.elements = (E[]) new Comparable[size];
  173. }
  174.  
  175. public boolean insert(E elem) {
  176. if(size == elements.length) return false;
  177. elements[size] = elem;
  178. size++;
  179. adjustUp(size-1);
  180. return true;
  181. }
  182.  
  183. private void adjustUp(int i) {
  184. if(i <= 0) return;
  185. int parent = getParent(i);
  186. if(elements[i].compareTo(elements[parent]) <= 0)
  187. return;
  188. else {
  189. swap(i, parent);
  190. adjustUp(parent);
  191. }
  192. }
  193.  
  194. public boolean isEmpty() {
  195. return size==0 ? true : false;
  196. }
  197.  
  198. public E getMax() {
  199. return isEmpty() ? null : elements[0];
  200. }
  201.  
  202. public int getSize() {
  203. return size;
  204. }
  205.  
  206. public E removeMax() {
  207. if(isEmpty()) return null;
  208. E tmp = elements[0];
  209. elements[0] = elements[size-1];
  210. size--;
  211. adjustMax(0, size);
  212. return tmp;
  213. }
  214.  
  215. // zavrsuva implementacijata na Prioritetnata redica
  216. }
  217. Sample input
  218. 7
  219. 18:46 287
  220. 22:39 48
  221. 16:21 146
  222. 23:43 140
  223. 21:47 279
  224. 23:49 25
  225. 20:02 230
  226. Sample output
  227. 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement