mvCode

Company Компанија AIPS kolokviumska, juni 2019

Jan 20th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.94 KB | None | 0 0
  1. /*АПС - КОМПАНИЈА
  2. Во една компанија организацијата на работните позиции е дадена како пар (вработен,менаџер) кој кажува кој вработен под кој пенаџер припаѓа. Потребно е да се направи некоја статистика во компанијата и според тоа треба да се даде извештај за тоа колку вработени менаџери од компанијата, колку вработени имаат под нив. Може да се случи менаџер на некои вработени да биде надворешно лице. Еден вработен може да припаѓа на само еден менаџер.
  3.  
  4. ВЛЕЗ: Во првиот ред од влезот е даден бројот на парови кои ќе се внесува N (N<=10000), а во секој нареден ред се дадени паровите (име_вработен, име_менаџер).
  5.  
  6. ИЗЛЕЗ: Листата со имињата на вработените менаџери во компанијата и тоа колку вработени имаат под нивно раководство.
  7.  
  8. ДЕЛУМНО РЕШЕНИЕ: Задачата се смета за делумно решена доколку се поминати 7 тест примери.
  9.  
  10. ЗАБЕЛЕШКА: Задачата треба да се реши со помош на хеширање.
  11.  
  12.  Мој коментар:
  13. Не знам дали смее да се користат готови класи од јава, како import java.util.LinkedList.
  14. Ако не смее, сличен ефект може да се постигне со низа или SLL/DLL.
  15. НАПОМЕНА: МЕНАЏЕР МОЖЕ ДА БИДЕ НАДВОРЕШНО ЛИЦЕ, па за да сме сигурни дали да го печатиме, мора прво да се провери дали е вработен на некој друг менаџер или е вработен на самиот себе.
  16. Ако е вработен на сам себе, НЕ СЕ БРОИ во вработени.
  17. /*
  18.  
  19. /* dva test primeri
  20. 6
  21. Aleks Marko
  22. Beti Marko
  23. Marko Filip
  24. Darko Elena
  25. Elena Filip
  26. Filip Filip
  27.  
  28. treba da se dobie:
  29. Marko = 2, Filip = 2, Elena = 1
  30.  */
  31. /*
  32. 5
  33. Aleks Marko
  34. Beti Marko
  35. Marko Filip
  36. Darko Elena
  37. Elena Filip
  38. treba da se dobie:
  39. Marko = 2, Elena = 1
  40.  */
  41.  
  42. import java.io.BufferedReader;
  43. import java.io.IOException;
  44. import java.io.InputStreamReader;
  45. import java.util.LinkedList;
  46.  
  47. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  48.  
  49.     // Each MapEntry object is a pair consisting of a key (a Comparable
  50.     // object) and a value (an arbitrary object).
  51.     K key;
  52.     E value;
  53.  
  54.     public MapEntry (K key, E val) {
  55.         this.key = key;
  56.         this.value = val;
  57.     }
  58.  
  59.     public int compareTo (K that) {
  60.         // Compare this map entry to that map entry.
  61.         @SuppressWarnings("unchecked")
  62.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  63.         return this.key.compareTo(other.key);
  64.     }
  65.  
  66.     public String toString () {
  67.         return "<" + key + "," + value + ">";
  68.     }
  69. }
  70.  
  71.  
  72. class SLLNode<E> {
  73.     protected E element;
  74.     protected SLLNode<E> succ;
  75.  
  76.     public SLLNode(E elem, SLLNode<E> succ) {
  77.         this.element = elem;
  78.         this.succ = succ;
  79.     }
  80.  
  81.     @Override
  82.     public String toString() {
  83.         return element.toString();
  84.     }
  85. }
  86.  
  87. class CBHT<K extends Comparable<K>, E> {
  88.  
  89.     // An object of class CBHT is a closed-bucket hash table, containing
  90.     // entries of class MapEntry.
  91.     private SLLNode<MapEntry<K,E>>[] buckets;
  92.  
  93.     @SuppressWarnings("unchecked")
  94.     public CBHT(int m) {
  95.         // Construct an empty CBHT with m buckets.
  96.         buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  97.     }
  98.  
  99.     private int hash(K key) {
  100.         // Translate key to an index of the array buckets.
  101.         return Math.abs(key.hashCode()) % buckets.length;
  102.     }
  103.  
  104.     public SLLNode<MapEntry<K,E>> search(K targetKey) {
  105.         // Find which if any node of this CBHT contains an entry whose key is
  106.         // equal
  107.         // to targetKey. Return a link to that node (or null if there is none).
  108.         int b = hash(targetKey);
  109.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  110.             if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  111.                 return curr;
  112.         }
  113.         return null;
  114.     }
  115.  
  116.     public void insert(K key, E val) {      // Insert the entry <key, val> into this CBHT.
  117.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  118.         int b = hash(key);
  119.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  120.             if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  121.                 // Make newEntry replace the existing entry ...
  122.                 curr.element = newEntry;
  123.                 return;
  124.             }
  125.         }
  126.         // Insert newEntry at the front of the 1WLL in bucket b ...
  127.         buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  128.     }
  129.  
  130.     public void delete(K key) {
  131.         // Delete the entry (if any) whose key is equal to key from this CBHT.
  132.         int b = hash(key);
  133.         for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  134.             if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  135.                 if (pred == null)
  136.                     buckets[b] = curr.succ;
  137.                 else
  138.                     pred.succ = curr.succ;
  139.                 return;
  140.             }
  141.         }
  142.     }
  143.  
  144.     public String toString() {
  145.         String temp = "";
  146.         for (int i = 0; i < buckets.length; i++) {
  147.             temp += i + ":";
  148.             for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  149.                 temp += curr.element.toString() + " ";
  150.             }
  151.             temp += "\n";
  152.         }
  153.         return temp;
  154.     }
  155.  
  156. }
  157.  
  158.  
  159. public class Kompanija {
  160.  
  161.     public static void main( String[]args ) throws IOException{
  162.  
  163.         BufferedReader br = new BufferedReader( new InputStreamReader( System.in ));
  164.         int N = Integer.parseInt( br.readLine() );
  165.  
  166.         CBHT<String, LinkedList<String> > hash = new CBHT<>( 2 * N ); // vo linked list ke gi cuvam site vraboteni za koi e odgovoren eden menadzer
  167.         String []menadzeri = new String[ 100 ]; // gi stavam menadzerite za podocna da mozam da pristapam do niv
  168.         int menadzeriN = 0; // br na menadzeri
  169.  
  170.         for ( int i = 0; i < N; i++ ){
  171.  
  172.             String str = br.readLine();
  173.             String []par = str.split( " " );
  174.  
  175.             LinkedList<String> list = new LinkedList<>(); // pravi lista vo koja go stava momentalniot vraboten na menadzerot
  176.             list.add( par[0] );
  177.  
  178.             SLLNode< MapEntry< String, LinkedList<String> > > mEntry = hash.search( par[1] ); // kofickata na menadzerot i
  179.  
  180.             if ( mEntry == null ) { // ako ne postoi koficka so ovoj menadzer i, pravam
  181.                 hash.insert(par[1], list);
  182.                 menadzeri[ menadzeriN++ ] = par[1];
  183.             }
  184.  
  185.             else{ // ako postoi vo listata na negovi vraboteni( na menadzerot i ) go dodavam vraboteniot
  186.                 list = mEntry.element.value;
  187.                 list.add( par[0] );
  188.             }
  189.  
  190.         }
  191.  
  192.         for ( int i = 0; i < menadzeriN; i++){ // ja iteriram nizata od menadzeri
  193.                 boolean vrabotenE = false;
  194.  
  195.             for ( int k = 0; k < menadzeriN; k++ ){ // povtorno ja iteriram nizata od menadzeri
  196.                 LinkedList<String> list = hash.search( menadzeri[k] ).element.value; // listata od vraboteni na menadzerot k( pominuva za site menadzeri vo hashot)
  197.  
  198.                 for ( int j = 0; j < list.size(); j++ ){ // gi iteriram site iminja vo lstata
  199.  
  200.                     if( list.get( j ).equals( menadzeri[i] ) ){ // ako go najdam imeto na menadzerot, znaci deka e nekade vraboten
  201.                         vrabotenE = true;
  202.                         break;
  203.                     }
  204.                 }
  205.             }
  206.  
  207.             if( vrabotenE ){ //ako menadzerot e vraboten vo firmata
  208.  
  209.                 LinkedList<String> giMenadzira = hash.search( menadzeri[i] ).element.value; // vrabotenite na mendzer i
  210.                 int num = 0; // br na vrabotemi
  211.                 for( int j = 0; j < giMenadzira.size(); j++ ){ // gi iterira vrabotenite
  212.                     String str = giMenadzira.get( j );
  213.  
  214.                     if( !str.equals( menadzeri[i] ) ){ // ako se najde samiot sebe vo svoite vraboteni, ne se broi
  215.                         num++;
  216.                     }
  217.                 }
  218.                 System.out.print(  menadzeri[ i ] + "=" + num + ", " );
  219.             }
  220.         }
  221.  
  222.        //System.out.println( hash.toString() );
  223.     }
  224. }
Add Comment
Please, Sign In to add comment