Advertisement
mvCode

kolokviumska Poraki AIPS vtor kolovium 2020

Feb 8th, 2020
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.28 KB | None | 0 0
  1. /*
  2. se cita broj N koj pretstavuva br na poraki koi se vnesuvaat vo hash
  3. se vnesuvaat poraki od vlez vo format: ime vreme datum status
  4.  - statusot moze da e READ, UNREAD ili TRASH.
  5. *faktor na popolnetost na hashot mora da e 0.5
  6.  
  7. se cita broj M koj pretstavuva br na poraki na koi treba da im se promeni statusot
  8. se vnesuvaat poraki od vlez vo format: ime vreme datum operacija
  9. na porakata treba da i se smeni statusot soodvetno so operacijata sto se izvrsuva
  10.  
  11. operacija   status
  12. READ        READ
  13. UNREAD      UNREAD
  14. DELETE      TRASH
  15. RECOVER     READ
  16.  
  17. za sekoja poraka se cuva kolku pati bil promenet statusot
  18.  
  19. se cita broj K koj pretstavuva br na poraki za koi treba da se ispecati statusot i kolku pati toj bil promenet
  20. se vnesuvaat poraki od vlez vo format: ime vreme datum
  21. treba da se ispecati: status br_na_promeni
  22.  
  23. primeri:
  24.  
  25. pr1.
  26. 3
  27. poraka1 12:35 07.06.2020 READ
  28. poraka2 13:40 09.07.2012 TRASH
  29. poraka3 01:09 12.12.1999 UNREAD
  30. 3
  31. poraka1 12:35 07.06.2020 DELETE
  32. poraka2 13:40 09.07.2012 RECOVER
  33. poraka3 01:09 12.12.1999 READ
  34. 3
  35. poraka1 12:35 07.06.2020
  36. poraka2 13:40 09.07.2012
  37. poraka3 01:09 12.12.1999
  38.  
  39. pr2.
  40. 3
  41. poraka1 12:35 07.06.2020 READ
  42. poraka2 13:40 09.07.2012 TRASH
  43. poraka3 01:09 12.12.1999 UNREAD
  44. 6
  45. poraka1 12:35 07.06.2020 DELETE
  46. poraka2 13:40 09.07.2012 RECOVER
  47. poraka3 01:09 12.12.1999 READ
  48. poraka1 12:35 07.06.2020 RECOVER
  49. poraka2 13:40 09.07.2012 READ
  50. poraka3 01:09 12.12.1999 DELETE
  51. 3
  52. poraka1 12:35 07.06.2020
  53. poraka2 13:40 09.07.2012
  54. poraka3 01:09 12.12.1999
  55.  
  56.  */
  57.  
  58.  
  59. import java.io.BufferedReader;
  60. import java.io.IOException;
  61. import java.io.InputStreamReader;
  62.  
  63. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  64.  
  65.     // Each MapEntry object is a pair consisting of a key (a Comparable
  66.     // object) and a value (an arbitrary object).
  67.     K key;
  68.     E value;
  69.  
  70.     public MapEntry(K key, E val) {
  71.         this.key = key;
  72.         this.value = val;
  73.     }
  74.  
  75.     public int compareTo(K that) {
  76.         // Compare this map entry to that map entry.
  77.         @SuppressWarnings("unchecked")
  78.         MapEntry<K, E> other = (MapEntry<K, E>) that;
  79.         return this.key.compareTo(other.key);
  80.     }
  81.  
  82.     public String toString() {
  83.         return "<" + key + "," + value + ">";
  84.     }
  85. }
  86.  
  87. class OBHT<K extends Comparable<K>,E> {
  88.  
  89.     // An object of class OBHT is an open-bucket hash table, containing entries
  90.     // of class MapEntry.
  91.     private MapEntry<K,E>[] buckets;
  92.  
  93.     // buckets[b] is null if bucket b has never been occupied.
  94.     // buckets[b] is former if bucket b is formerly-occupied
  95.     // by an entry that has since been deleted (and not yet replaced).
  96.  
  97.     static final int NONE = -1; // ... distinct from any bucket index.
  98.  
  99.     private static final MapEntry former = new MapEntry(null, null);
  100.     // This guarantees that, for any genuine entry e,
  101.     // e.key.equals(former.key) returns false.
  102.  
  103.     private int occupancy = 0;
  104.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  105.  
  106.     @SuppressWarnings("unchecked")
  107.     public OBHT (int m) {
  108.         // Construct an empty OBHT with m buckets.
  109.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  110.     }
  111.  
  112.     public MapEntry<K, E> getMapEntry( int b ) {
  113.         return buckets[b];
  114.     }
  115.  
  116.     private int hash (K key) {
  117.         // Translate key to an index of the array buckets.
  118.         return Math.abs(key.hashCode()) % buckets.length;
  119.     }
  120.  
  121.  
  122.     public int search (K targetKey) {
  123.         // Find which if any bucket of this OBHT is occupied by an entry whose key
  124.         // is equal to targetKey. Return the index of that bucket.
  125.         int b = hash(targetKey); int n_search=0;
  126.         for (;;) {
  127.             MapEntry<K,E> oldEntry = buckets[b];
  128.             if (oldEntry == null)
  129.                 return NONE;
  130.             else if (targetKey.equals(oldEntry.key))
  131.                 return b;
  132.             else
  133.             {
  134.                 b = (b + 1) % buckets.length;
  135.                 n_search++;
  136.                 if(n_search==buckets.length)
  137.                     return NONE;
  138.  
  139.             }
  140.         }
  141.     }
  142.  
  143.  
  144.     public void insert (K key, E val) {
  145.         // Insert the entry <key, val> into this OBHT.
  146.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  147.         int b = hash(key); int n_search=0;
  148.         for (;;) {
  149.             MapEntry<K,E> oldEntry = buckets[b];
  150.             if (oldEntry == null) {
  151.                 if (++occupancy == buckets.length) {
  152.                     System.out.println("Hash tabelata e polna!!!");
  153.                 }
  154.                 buckets[b] = newEntry;
  155.                 return;
  156.             }
  157.             else if (oldEntry == former
  158.                     || key.equals(oldEntry.key)) {
  159.                 buckets[b] = newEntry;
  160.                 return;
  161.             }
  162.             else
  163.             {
  164.                 b = (b + 1) % buckets.length;
  165.                 n_search++;
  166.                 if(n_search==buckets.length)
  167.                     return;
  168.  
  169.             }
  170.         }
  171.     }
  172.  
  173.  
  174.     @SuppressWarnings("unchecked")
  175.     public void delete (K key) {
  176.         // Delete the entry (if any) whose key is equal to key from this OBHT.
  177.         int b = hash(key); int n_search=0;
  178.         for (;;) {
  179.             MapEntry<K,E> oldEntry = buckets[b];
  180.  
  181.             if (oldEntry == null)
  182.                 return;
  183.             else if (key.equals(oldEntry.key)) {
  184.                 buckets[b] = former;//(MapEntry<K,E>)former;
  185.                 return;
  186.             }
  187.             else{
  188.                 b = (b + 1) % buckets.length;
  189.                 n_search++;
  190.                 if(n_search==buckets.length)
  191.                     return;
  192.  
  193.             }
  194.         }
  195.     }
  196.  
  197.  
  198.     public String toString () {
  199.         String temp = "";
  200.         for (int i = 0; i < buckets.length; i++) {
  201.             temp += i + ":";
  202.             if (buckets[i] == null)
  203.                 temp += "\n";
  204.             else if (buckets[i] == former)
  205.                 temp += "former\n";
  206.             else
  207.                 temp += buckets[i] + "\n";
  208.         }
  209.         return temp;
  210.     }
  211.  
  212.  
  213.     public OBHT<K,E> clone () {
  214.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  215.         for (int i = 0; i < buckets.length; i++) {
  216.             MapEntry<K,E> e = buckets[i];
  217.             if (e != null && e != former)
  218.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  219.             else
  220.                 copy.buckets[i] = e;
  221.         }
  222.         return copy;
  223.     }
  224. }
  225.  
  226. class Status1{ // se cuva par od status i kolku pati toj bil promenet
  227.  
  228.     private String status;
  229.     private  int brojac;
  230.  
  231.     public Status1( String st ){
  232.  
  233.         status = st;
  234.         brojac = 0;
  235.     }
  236.  
  237.     public String getStatus() {
  238.         return status;
  239.     }
  240.  
  241.     public void setStatus(String status) {
  242.         this.status = status;
  243.         brojac++;
  244.     }
  245.  
  246.     public void pecatiStatus1(){
  247.  
  248.         System.out.println( status + " " + brojac );
  249.     }
  250.  
  251. }
  252.  
  253. public class Poraki {
  254.  
  255.     public static void main( String[] args ) throws IOException {
  256.  
  257.         BufferedReader br = new BufferedReader( new InputStreamReader( System.in ));
  258.         String read = br.readLine();
  259.         int N = Integer.parseInt( read ); // br na poraki
  260.  
  261.         OBHT< String, Status1 > table = new OBHT<>( 2*N );
  262.  
  263.         for ( int i = 0; i < N; i++ ){
  264.  
  265.             read= br.readLine();
  266.             String[] niza = read.split( " " );
  267.             String key = niza[0] + " " + niza[1] + " " + niza[2];
  268.             Status1 value = new Status1( niza[3] );
  269.  
  270.             table.insert( key, value );
  271.         } // vnesuvam poraki vo hash
  272.  
  273.         read = br.readLine();
  274.         int M = Integer.parseInt( read ); // broj na operacii vrz porakite
  275.  
  276.         for ( int i = 0; i < M; i++ ){
  277.  
  278.             read= br.readLine();
  279.             String[] niza = read.split( " " );
  280.             String key = niza[0] + " " + niza[1] + " " + niza[2];
  281.             // niza[3] e operacija so treba da se izvrsi
  282.             String operation = niza[3]; // operations: READ UNREAD DELETE RECOVER
  283.             int b = table.search( key );
  284.             if( b < 0 ){
  285.                 System.out.println( "Ne postoi porakata 1" );
  286.                 continue;
  287.             }
  288.  
  289.             MapEntry< String, Status1 > temp = table.getMapEntry( b );
  290.  
  291.             if( operation.equals( "READ" ) ){
  292.  
  293.                 temp.value.setStatus( "READ" );
  294.             }
  295.             if( operation.equals( "UNREAD" ) ){
  296.  
  297.                 temp.value.setStatus( "UNREAD" );
  298.             }
  299.             if( operation.equals( "DELETE" ) ){
  300.  
  301.                 temp.value.setStatus( "TRASH" );
  302.             }
  303.             if( operation.equals( "RECOVER" ) ){
  304.  
  305.                 temp.value.setStatus( "READ" );
  306.             }
  307.  
  308.         }
  309.  
  310.         read = br.readLine();
  311.         int K = Integer.parseInt( read ); // broj na poraki za da se vrati ststus
  312.  
  313.         for ( int i = 0; i < K; i++ ){
  314.  
  315.             read= br.readLine();
  316.             String[] niza = read.split( " " );
  317.             String key = niza[0] + " " + niza[1] + " " + niza[2];
  318.  
  319.             int b = table.search( key );
  320.             if( b < 0 ){
  321.                 System.out.println( "Ne postoi porakata" );
  322.                 continue;
  323.             }
  324.  
  325.             MapEntry< String, Status1 > temp = table.getMapEntry( b );
  326.             temp.value.pecatiStatus1();
  327.  
  328.         }
  329.  
  330.     }
  331. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement