Advertisement
Kame3

Black Friday lab8.2

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