ivafinki

aps 2kolok

Jan 21st, 2021
722
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Треба да се провери колку посто од тестираните се позитивни со помош на две CBHT табели
  3. една за позитивни една за негативни. Се внесуваат прво општина па презиме па резултат.Ако има две исти
  4. презимиња тие се сметаат како две посебни личности.
  5.  
  6. riskfactor = бр.позитивни/бр.позитивни + бр.негативни
  7.  
  8. riskfactor се принта со две децимални цифри
  9.  
  10.  */
  11. import java.io.BufferedReader;
  12. import java.io.IOException;
  13. import java.io.InputStreamReader;
  14.  
  15. class SLLNode<E> {
  16.     protected E element;
  17.     protected SLLNode<E> succ;
  18.  
  19.     public SLLNode(E elem, SLLNode<E> succ) {
  20.         this.element = elem;
  21.         this.succ = succ;
  22.     }
  23.  
  24.     @Override
  25.     public String toString() {
  26.         return element.toString();
  27.     }
  28. }
  29.  
  30. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  31.  
  32.     // Each MapEntry object is a pair consisting of a key (a Comparable
  33.     // object) and a value (an arbitrary object).
  34.     K key;
  35.     E value;
  36.  
  37.     public MapEntry (K key, E val) {
  38.         this.key = key;
  39.         this.value = val;
  40.     }
  41.  
  42.     public int compareTo (K that) {
  43.         // Compare this map entry to that map entry.
  44.         @SuppressWarnings("unchecked")
  45.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  46.         return this.key.compareTo(other.key);
  47.     }
  48.  
  49.     public String toString () {
  50.         return "<" + key + "," + value + ">";
  51.     }
  52. }
  53.  
  54.  
  55.  
  56. class CBHT<K extends Comparable<K>, E> {
  57.  
  58.     // An object of class CBHT is a closed-bucket hash table, containing
  59.     // entries of class MapEntry.
  60.     private SLLNode<MapEntry<K,E>>[] buckets;
  61.  
  62.     @SuppressWarnings("unchecked")
  63.     public CBHT(int m) {
  64.         // Construct an empty CBHT with m buckets.
  65.         buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  66.     }
  67.  
  68.     private int hash(K key) {
  69.         // Translate key to an index of the array buckets.
  70.         return Math.abs(key.hashCode()) % buckets.length;
  71.     }
  72.  
  73.     public SLLNode<MapEntry<K,E>> search(K targetKey) {
  74.         // Find which if any node of this CBHT contains an entry whose key is
  75.         // equal
  76.         // to targetKey. Return a link to that node (or null if there is none).
  77.         int b = hash(targetKey);
  78.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  79.             if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  80.                 return curr;
  81.         }
  82.         return null;
  83.     }
  84.  
  85.     public void insert(K key, E val) {      // Insert the entry <key, val> into this CBHT.
  86.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  87.         int b = hash(key);
  88.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  89.             if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  90.                 // Make newEntry replace the existing entry ...
  91.                 curr.element = newEntry;
  92.                 return;
  93.             }
  94.         }
  95.         // Insert newEntry at the front of the 1WLL in bucket b ...
  96.         buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  97.     }
  98.  
  99.     public void delete(K key) {
  100.         // Delete the entry (if any) whose key is equal to key from this CBHT.
  101.         int b = hash(key);
  102.         for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  103.             if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  104.                 if (pred == null)
  105.                     buckets[b] = curr.succ;
  106.                 else
  107.                     pred.succ = curr.succ;
  108.                 return;
  109.             }
  110.         }
  111.     }
  112.  
  113.     public String toString() {
  114.         String temp = "";
  115.         for (int i = 0; i < buckets.length; i++) {
  116.             temp += i + ":";
  117.             for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  118.                 temp += curr.element.toString() + " ";
  119.             }
  120.             temp += "\n";
  121.         }
  122.         return temp;
  123.     }
  124.  
  125. }
  126.  
  127. public class CoronaRiskFactor {
  128.     public static void main(String[] args) throws NumberFormatException, IOException {
  129.         BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  130.         int N = Integer.parseInt(bf.readLine());
  131.         //
  132.         CBHT<String,Integer> tabelaPozitivni = new CBHT<>(N*2);//opstina,rezultat
  133.         CBHT<String,Integer> tabelaNegativni = new CBHT<>(N*2);//opstina,rezultat
  134.  
  135.  
  136.         for(int i = 0; i<N; i++){
  137.             String p []= bf.readLine().split(" ");
  138.             String opstina = p[0];
  139.             String prezime = p[1];
  140.             String rezultat = p[2];
  141.  
  142.             if(rezultat.equals("negativen")){
  143.                 SLLNode<MapEntry<String, Integer>> search = tabelaNegativni.search(opstina);
  144.                 if(search==null){
  145.                     tabelaNegativni.insert(opstina,1);
  146.                 }else{
  147.                     int value = tabelaNegativni.search(opstina).element.value+1;
  148.                     tabelaNegativni.insert(opstina,value);
  149.                 }
  150.  
  151.  
  152.             }else{
  153.                 SLLNode<MapEntry<String, Integer>> search = tabelaPozitivni.search(opstina);
  154.                 if(search==null){
  155.                     tabelaPozitivni.insert(opstina,1);
  156.                 }else{
  157.                     int value = tabelaPozitivni.search(opstina).element.value+1;
  158.                     tabelaPozitivni.insert(opstina,value);
  159.                 }
  160.             }
  161.  
  162.         }
  163.  
  164.         String opstina = bf.readLine();
  165.         int pozitivni = 0;
  166.         int negativni = 0;
  167.  
  168.         SLLNode<MapEntry<String, Integer>> searchPozitivni = tabelaPozitivni.search(opstina);
  169.         SLLNode<MapEntry<String, Integer>> searchNegativni = tabelaNegativni.search(opstina);
  170.         if(searchPozitivni!=null){
  171.             pozitivni = tabelaPozitivni.search(opstina).element.value;
  172.         }
  173.         if(searchNegativni!=null){
  174.             negativni = tabelaNegativni.search(opstina).element.value;
  175.         }
  176.  
  177.         int vkupno = pozitivni+negativni;
  178.  
  179.  
  180.         float riskFactor = (float)pozitivni/vkupno;
  181.  
  182.         System.out.println(String.format("%.2f", riskFactor));
  183.     }
  184.  
  185.  
  186. }
RAW Paste Data