Advertisement
Kame3

Lek_so_najniska_cena-[хеширање]

May 19th, 2021
1,504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.75 KB | None | 0 0
  1. Во магацинот на една фармацевтска компанија се чуваат најразлични видови лекови.
  2. За секој лек потребно е да се чуваат податоци за името на лекот, цената во денари и
  3. намената на лекот. За поефикасен пристап до податоците за лековите, фармацевтската компанија
  4. одлучила податоците да ги чува во хеш табела (CBHT) каде се сместуваат соодветните податоци.
  5.  
  6. Хеш табелата е достапна до крајните клиенти и истите може да пребаруваат низ внесените
  7. податоци. Бидејќи на пазарот постојат повеќе лекови кои таргетираат иста болест, најчесто
  8. клиентите го бараат оној лек кој има најниска цена. Па вашата задача е со користење на
  9. хеш табелата, за дадена намена (болест), да го испечатите лекот кој има најниска цена на пазарот.
  10. Доколку за бараната намена во магацинот нема лек се печати "Nema lek za baranata
  11. namena vo magacin.".
  12.  
  13. Влез:
  14.  
  15. Најпрво е даден бројот на лекови - N, а потоа секој лек е даден во нов ред во форматот:
  16.  
  17. “Име на лек” “Намена” “Цена во денари”
  18.  
  19. На крај е дадена намената за која треба да се пронајде лекот со најниска цена.
  20.  
  21. Излез:
  22.  
  23. Името на лекот со најмала цена.
  24.  
  25.  
  26. package com.example;
  27.  
  28. import java.io.BufferedReader;
  29. import java.io.IOException;
  30. import java.io.InputStreamReader;
  31. import java.util.HashMap;
  32. import java.util.Hashtable;
  33. import java.util.Map;
  34.  
  35. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  36.  
  37.     // Each MapEntry object is a pair consisting of a key (a Comparable
  38.     // object) and a value (an arbitrary object).
  39.     K key;
  40.     E value;
  41.  
  42.     public MapEntry (K key, E val) {
  43.         this.key = key;
  44.         this.value = val;
  45.     }
  46.  
  47.     public int compareTo (K that) {
  48.         // Compare this map entry to that map entry.
  49.         @SuppressWarnings("unchecked")
  50.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  51.         return this.key.compareTo(other.key);
  52.     }
  53.  
  54.     public String toString () {
  55.         return "<" + key + "," + value + ">";
  56.     }
  57. }
  58.  
  59. class OBHT<K extends Comparable<K>,E> {
  60.  
  61.     // An object of class OBHT is an open-bucket hash table, containing entries
  62.     // of class MapEntry.
  63.     private MapEntry<K,E>[] buckets;
  64.  
  65.     // buckets[b] is null if bucket b has never been occupied.
  66.     // buckets[b] is former if bucket b is formerly-occupied
  67.     // by an entry that has since been deleted (and not yet replaced).
  68.  
  69.     static final int NONE = -1; // ... distinct from any bucket index.
  70.  
  71.     private static final MapEntry former = new MapEntry(null, null);
  72.     // This guarantees that, for any genuine entry e,
  73.     // e.key.equals(former.key) returns false.
  74.  
  75.     private int occupancy = 0;
  76.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  77.  
  78.     @SuppressWarnings("unchecked")
  79.     public OBHT (int m) {
  80.         // Construct an empty OBHT with m buckets.
  81.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  82.     }
  83.  
  84.  
  85.     private int hash (K key) {
  86.         // Translate key to an index of the array buckets.
  87.         return Math.abs(key.hashCode()) % buckets.length;
  88.     }
  89.  
  90.  
  91.     public int search (K targetKey) {
  92.         // Find which if any bucket of this OBHT is occupied by an entry whose key
  93.         // is equal to targetKey. Return the index of that bucket.
  94.         int b = hash(targetKey); int n_search=0;
  95.         for (;;) {
  96.             MapEntry<K,E> oldEntry = buckets[b];
  97.             if (oldEntry == null)
  98.                 return NONE;
  99.             else if (targetKey.equals(oldEntry.key))
  100.                 return b;
  101.             else
  102.             {
  103.                 b = (b + 1) % buckets.length;
  104.                 n_search++;
  105.                 if(n_search==buckets.length)
  106.                     return NONE;
  107.  
  108.             }
  109.         }
  110.     }
  111.  
  112.  
  113.     public void insert (K key, E val) {
  114.         // Insert the entry <key, val> into this OBHT.
  115.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  116.         int b = hash(key); int n_search=0;
  117.         for (;;) {
  118.             MapEntry<K,E> oldEntry = buckets[b];
  119.             if (oldEntry == null) {
  120.                 if (++occupancy == buckets.length) {
  121.                     System.out.println("Hash tabelata e polna!!!");
  122.                 }
  123.                 buckets[b] = newEntry;
  124.                 return;
  125.             }
  126.             else if (oldEntry == former
  127.                     || key.equals(oldEntry.key)) {
  128.                 buckets[b] = newEntry;
  129.                 return;
  130.             }
  131.             else
  132.             {
  133.                 b = (b + 1) % buckets.length;
  134.                 n_search++;
  135.                 if(n_search==buckets.length)
  136.                     return;
  137.  
  138.             }
  139.         }
  140.     }
  141.  
  142.  
  143.     @SuppressWarnings("unchecked")
  144.     public void delete (K key) {
  145.         // Delete the entry (if any) whose key is equal to key from this OBHT.
  146.         int b = hash(key); int n_search=0;
  147.         for (;;) {
  148.             MapEntry<K,E> oldEntry = buckets[b];
  149.  
  150.             if (oldEntry == null)
  151.                 return;
  152.             else if (key.equals(oldEntry.key)) {
  153.                 buckets[b] = former;//(MapEntry<K,E>)former;
  154.                 return;
  155.             }
  156.             else{
  157.                 b = (b + 1) % buckets.length;
  158.                 n_search++;
  159.                 if(n_search==buckets.length)
  160.                     return;
  161.  
  162.             }
  163.         }
  164.     }
  165.  
  166.  
  167.     public String toString () {
  168.         String temp = "";
  169.         for (int i = 0; i < buckets.length; i++) {
  170.             temp += i + ":";
  171.             if (buckets[i] == null)
  172.                 temp += "\n";
  173.             else if (buckets[i] == former)
  174.                 temp += "former\n";
  175.             else
  176.                 temp += buckets[i] + "\n";
  177.         }
  178.         return temp;
  179.     }
  180.  
  181.  
  182.     public OBHT<K,E> clone () {
  183.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  184.         for (int i = 0; i < buckets.length; i++) {
  185.             MapEntry<K,E> e = buckets[i];
  186.             if (e != null && e != former)
  187.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  188.             else
  189.                 copy.buckets[i] = e;
  190.         }
  191.         return copy;
  192.     }
  193. }
  194.  
  195. class Lek {
  196.     String name;
  197.     String purpose;
  198.     int price;
  199.  
  200.     public Lek() {}
  201.     public Lek(String name, String purpose, int price) {
  202.         this.name = name;
  203.         this.purpose = purpose;
  204.         this.price = price;
  205.     }
  206.  
  207.     public String getName() {
  208.         return this.name;
  209.     }
  210.     public String getPurpose() {
  211.         return this.purpose;
  212.     }
  213.     public int getPrice() {
  214.         return this.price;
  215.     }
  216.     public void setName(String name) {
  217.         this.name = name;
  218.     }
  219.     public void setPurpose(String purpose) {
  220.         this.purpose = purpose;
  221.     }
  222.     public void setPrice(int price) {
  223.         this.price = price;
  224.     }
  225. }
  226.  
  227. public class Main {
  228.     public static void main(String[] args) throws IOException {
  229.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  230.  
  231.         int n = Integer.parseInt(br.readLine());
  232.         HashMap<Integer,Lek> lekovi = new HashMap<>(n);
  233.  
  234.         for (int i=0; i<n; i++) {
  235.             String lek = br.readLine();
  236.             String[] pomniza = lek.split(" ");
  237.             String name = pomniza[0];
  238.             String purpose = pomniza[1];
  239.             int price = Integer.parseInt(pomniza[2]);
  240.             Lek l = new Lek(name,purpose,price);
  241.             lekovi.put(i,l);
  242.         }
  243.  
  244.         String namena = br.readLine();
  245.         String L = "";
  246.         int min = 1000000;
  247.         for (Map.Entry<Integer,Lek> curr : lekovi.entrySet()) {
  248.             if (curr.getValue().purpose.equals(namena)) {
  249.                 if (curr.getValue().price < min) {
  250.                     min = curr.getValue().price;
  251.                     L = curr.getValue().name;
  252.                 }
  253.             }
  254.         }
  255.         System.out.println(L);
  256.  
  257.     }
  258. }
  259.  
  260.  
  261.  
  262. Пример:
  263.  
  264. Влез:
  265.  
  266. 5
  267. Analgin Glavobolka 80
  268. Daleron Glavobolka 90
  269. Lineks Bolki_vo_stomak 150
  270. Spazmeks Bolki_vo_stomak 150
  271. Loratadin Alergija 150
  272.  
  273. Glavobolka
  274.  
  275. Излез:
  276.  
  277. Analgin
  278.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement