Chaushki

Black Friday APS

Dec 26th, 2022
2,942
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.78 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