Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Black Friday Problem 2 (2 / 2)
- Еден маркет за бела технка одлучил да ги спушти цените на своите производи еден работен петок дури до 80% по повод престојните Божикни празници. Поради оваа промоција јасно им било дека ќе има многу заинтересирани купувачи, па затоа одлучиле да воспостaват ред при влеувањето/излегувањето во маркетот. Купувачите влегуваат според времето на пристигнување. Потребно е да се пронајде колкав е максималниот број на купувачи кои ќе бидат присутни во маркетот. Во првата линија е даден бројот на купувачи кои чекаат да влезат, N. Секоја од наредните линии го означува часот и минутите на доаѓање на купувачот, како и колку време (во минути) ќе се задржи во маркетот, во формат: HH:MM d
- За да се реализира оваа задача потребно е да се користи соодветна податочна структура со која со најмала сложеност ќе се постигне бараниот резултат. Притоа е обезбедено да не може да се случи во ист момент да има влегување односно излегување од маркетот. Маркетот работи до 23:59.
- На излез треба да се испечати максималниот број купувачи кои што истовремено ќе бидат присутни во маркетот.
- Име на класа во Java: BlackFriday
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- class Time{
- protected int timein;
- protected int timeout;
- public Time(int timein, int timeout) {
- this.timein = timein;
- this.timeout = timeout;
- }
- @Override
- public String toString(){
- return this.timeout + "";
- }
- }
- class Heap{
- private Time elements[];
- public Heap(int n){
- elements = new Time[n];
- }
- int getParent(int i) {
- return (i+1)/2-1;
- }
- public Time getAt(int i) {
- return elements[i];
- }
- public int left(int i){
- return 2*i+1;
- }
- public int right(int i){
- return 2*i+2;
- }
- void setElement(int index, Time elem) {
- elements[index] = elem;
- }
- void swap(int i, int j) {
- Time tmp = elements[i];
- elements[i] = elements[j];
- elements[j] = tmp;
- }
- void adjust(int i, int n){
- while(i < n){
- int left = this.left(i);
- int right = this.right(i);
- int smallest = i;
- if(left < n&&elements[left].timeout < elements[smallest].timeout)
- smallest = left;
- if(right < n&&elements[right].timeout < elements[smallest].timeout)
- smallest = right;
- if(smallest == i)
- break;
- swap(i,smallest);
- i = smallest;
- }
- }
- void buildHeap() {
- for (int i=elements.length/2-1;i>=0;i--)
- adjust(i, elements.length);
- }
- public void heapSort() {
- int i;
- buildHeap();
- for (i=elements.length;i>1;i--) {
- swap(0, i-1);
- adjust(0, i-1);
- }
- }
- public int max(){
- int br = 1;
- int n = elements.length;
- int temp = elements[0].timeout;
- for(int i=1;i<n;i++)
- if(temp > elements[i].timein)
- br++;
- return br;
- }
- public void rotate(){
- int n = elements.length;
- Time[] temp = new Time[n-1];
- for(int i=1;i<n;i++)
- temp[i-1] = elements[i];
- elements = temp;
- }
- public int remove(){
- int max = 0;
- while( elements.length / 2 > 0){
- max = Math.max(max, max());
- rotate();
- this.buildHeap();
- }
- return max;
- }
- }
- public class BlackFriday {
- public static void main(String[] args) throws IOException {
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- int N=Integer.parseInt(br.readLine());
- Heap heap=new Heap(N);
- String time;
- int a1,a2;
- String[] parts=new String[2];
- String[] arriveParts=new String[2];
- for(int i=0;i<N;i++) {
- time=br.readLine();
- parts=time.split(" ");
- arriveParts=parts[0].split(":");
- a1=Integer.parseInt(arriveParts[0])*60+Integer.parseInt(arriveParts[1]);
- a2=a1+Integer.parseInt(parts[1]);
- if(a2 > 1439)
- a2 = 1439;
- Time t=new Time(a1,a2);
- heap.setElement(i, t);
- }
- heap.buildHeap();
- System.out.println(heap.remove());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement