Advertisement
teodor_dalavera

Проверка на спелување

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