Advertisement
HristijanBosheski

Проверка на спелување [АПС Вежби за втор колоквиум]

Jan 20th, 2018
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.34 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. class OBHT<K extends Comparable<K>,E> {
  6.  
  7.     // An object of class OBHT is an open-bucket hash table, containing entries
  8.     // of class MapEntry.
  9.     private MapEntry<K,E>[] buckets;
  10.    
  11.     // buckets[b] is null if bucket b has never been occupied.
  12.     // buckets[b] is former if bucket b is formerly-occupied
  13.     // by an entry that has since been deleted (and not yet replaced).
  14.  
  15.     static final int NONE = -1; // ... distinct from any bucket index.
  16.    
  17.     private static final MapEntry former = new MapEntry(null, null);
  18.     // This guarantees that, for any genuine entry e,
  19.     // e.key.equals(former.key) returns false.
  20.    
  21.     private int occupancy = 0;
  22.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  23.    
  24.     @SuppressWarnings("unchecked")
  25.     public OBHT (int m) {
  26.     // Construct an empty OBHT with m buckets.
  27.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  28.     }
  29.  
  30.  
  31.     private int hash (K key) {
  32.     // Translate key to an index of the array buckets.
  33.         return Math.abs(key.hashCode()) % buckets.length;
  34.     }
  35.  
  36.    
  37.     public int search (K targetKey) {
  38.     // Find which if any bucket of this OBHT is occupied by an entry whose key
  39.     // is equal to targetKey. Return the index of that bucket.
  40.         int b = hash(targetKey); int n_search=0;
  41.         for (;;) {
  42.             MapEntry<K,E> oldEntry = buckets[b];
  43.             if (oldEntry == null)
  44.                 return NONE;
  45.             else if (targetKey.equals(oldEntry.key))
  46.                 return b;
  47.             else
  48.             {
  49.                 b = (b + 1) % buckets.length;
  50.                 n_search++;
  51.                 if(n_search==buckets.length)
  52.                     return NONE;
  53.  
  54.             }
  55.         }
  56.     }
  57.  
  58.  
  59.     public void insert (K key, E val) {
  60.     // Insert the entry <key, val> into this OBHT.
  61.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  62.         int b = hash(key); int n_search=0;
  63.         for (;;) {
  64.             MapEntry<K,E> oldEntry = buckets[b];
  65.             if (oldEntry == null) {
  66.                 if (++occupancy == buckets.length) {
  67.                     System.out.println("Hash tabelata e polna!!!");
  68.                 }
  69.                 buckets[b] = newEntry;
  70.                 return;
  71.             }
  72.             else if (oldEntry == former
  73.                     || key.equals(oldEntry.key)) {
  74.                 buckets[b] = newEntry;
  75.                 return;
  76.             }
  77.             else
  78.             {
  79.                 b = (b + 1) % buckets.length;
  80.                 n_search++;
  81.                 if(n_search==buckets.length)
  82.                     return;
  83.  
  84.             }
  85.         }
  86.     }
  87.  
  88.    
  89.     @SuppressWarnings("unchecked")
  90.     public void delete (K key) {
  91.     // Delete the entry (if any) whose key is equal to key from this OBHT.
  92.         int b = hash(key); int n_search=0;
  93.         for (;;) {
  94.             MapEntry<K,E> oldEntry = buckets[b];
  95.            
  96.             if (oldEntry == null)
  97.                 return;
  98.             else if (key.equals(oldEntry.key)) {
  99.                 buckets[b] = former;//(MapEntry<K,E>)former;
  100.                 return;
  101.             }
  102.             else{
  103.                 b = (b + 1) % buckets.length;
  104.                 n_search++;
  105.                 if(n_search==buckets.length)
  106.                     return;
  107.  
  108.             }
  109.         }
  110.     }
  111.  
  112.  
  113.     public String toString () {
  114.         String temp = "";
  115.         for (int i = 0; i < buckets.length; i++) {
  116.             temp += i + ":";
  117.             if (buckets[i] == null)
  118.                 temp += "\n";
  119.             else if (buckets[i] == former)
  120.                 temp += "former\n";
  121.             else
  122.                 temp += buckets[i] + "\n";
  123.         }
  124.         return temp;
  125.     }
  126.  
  127.  
  128.     public OBHT<K,E> clone () {
  129.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  130.         for (int i = 0; i < buckets.length; i++) {
  131.             MapEntry<K,E> e = buckets[i];
  132.             if (e != null && e != former)
  133.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  134.             else
  135.                 copy.buckets[i] = e;
  136.         }
  137.         return copy;
  138.     }
  139. }
  140.  
  141. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  142.  
  143.     // Each MapEntry object is a pair consisting of a key (a Comparable
  144.     // object) and a value (an arbitrary object).
  145.     K key;
  146.     E value;
  147.  
  148.     public MapEntry (K key, E val) {
  149.         this.key = key;
  150.         this.value = val;
  151.     }
  152.    
  153.     public int compareTo (K that) {
  154.     // Compare this map entry to that map entry.
  155.         @SuppressWarnings("unchecked")
  156.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  157.         return this.key.compareTo(other.key);
  158.     }
  159.  
  160.     public String toString () {
  161.         return "<" + key + "," + value + ">";
  162.     }
  163. }
  164.  
  165. class SLLNode<E> {
  166.     protected E element;
  167.     protected SLLNode<E> succ;
  168.  
  169.     public SLLNode(E elem, SLLNode<E> succ) {
  170.         this.element = elem;
  171.         this.succ = succ;
  172.     }
  173.  
  174.     @Override
  175.     public String toString() {
  176.         return element.toString();
  177.     }
  178. }
  179.  
  180. public class Speluvanje {
  181.  
  182.     public static void main(String[] args) throws IOException {
  183.  
  184.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  185.         String expr = br.readLine();
  186.         String[] exp;
  187.        
  188.         int n = Integer.parseInt(expr);
  189.        
  190.         OBHT<String, String> h = new OBHT<>((int)(n/0.6));
  191.        
  192.         for(int i=0; i<n; i++){
  193.             expr = br.readLine();
  194.             h.insert(expr, expr);
  195.         }
  196.        
  197.         expr = br.readLine();
  198.         exp = expr.split(" ");
  199.        
  200.         boolean flag = true;
  201.        
  202.         for(int i=0; i<exp.length; i++){
  203.             boolean first = Character.isUpperCase(exp[i].charAt(0));
  204.             char last = exp[i].charAt(exp[i].length()-1);
  205.             if(Character.isLetter(last)){
  206.                 String word = exp[i].toLowerCase();
  207.                 if(h.search(word) == -1){
  208.                     flag = false;
  209.                     if(first){
  210.                         System.out.println(word.substring(0, 1).toUpperCase() + word.substring(1));
  211.                     }
  212.                     else{
  213.                         System.out.println(word);
  214.                     }
  215.                 }
  216.             }
  217.             else{
  218.                 String word = exp[i].substring(0, exp[i].length()-1).toLowerCase();
  219.                 if(h.search(word) == -1 && word.length() > 0){
  220.                     flag = false;
  221.                     if(first){
  222.                         System.out.println(word.substring(0, 1).toUpperCase() + word.substring(1));
  223.                     }
  224.                     else{
  225.                         System.out.println(word);
  226.                     }
  227.                 }
  228.             }
  229.         }
  230.        
  231.         if(flag){
  232.             System.out.println("Bravo");
  233.         }
  234.        
  235.         br.close();
  236.  
  237.     }
  238.  
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement