VSS2

LISTA4B - HASHIT

Apr 1st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.16 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Main{
  4.     public static void main(String[] args) {
  5.      
  6.         Scanner in = new Scanner (System.in);
  7.         int rep = in.nextInt();
  8.         int a = 0;
  9.  
  10.         while (a < rep){
  11.          
  12.             int b = 0;
  13.             int ope = in.nextInt();
  14.             String[] tabela = new String[101];
  15.             int tabelaFinaltam = 0;
  16.  
  17.             while(b < ope){
  18.              
  19.                 int entradas = 0;
  20.                 String linha = in.next();
  21.                 String texto = linha.substring(4,linha.length());
  22.                 int valHash = convHash(texto);
  23.                 boolean repetido = false;
  24.  
  25.                 if (linha.startsWith("ADD")){
  26.                  
  27.                     int c = 0;
  28.                     entradas = 0;
  29.  
  30.                     while (c < 101){
  31.                         if (tabela[c] != null && tabela[c].equals(texto)){
  32.                             repetido = true;
  33.                         }
  34.                         c++;
  35.                     }
  36.  
  37.                     if (repetido == false){
  38.                      
  39.                         int localValor = 0;
  40.                        
  41.                         while (entradas < 20){
  42.                             localValor = antiColisao(valHash,entradas);
  43.                             if (tabela[localValor] == null){
  44.                                 tabelaFinaltam++;
  45.                                 tabela[localValor] = texto;
  46.                                 entradas = 20;
  47.                             }
  48.                             entradas++;
  49.                         }
  50.                     }
  51.                 } else {
  52.                  
  53.                     entradas = 0;
  54.  
  55.                     while (entradas < 20){
  56.                         int removerValor = antiColisao(valHash,entradas);
  57.                        
  58.                         if (tabela[removerValor] != null && tabela[removerValor].equals(texto)){
  59.                             tabelaFinaltam--;
  60.                             tabela[removerValor] = null;
  61.                             entradas = 20;
  62.                         }
  63.                         entradas++;
  64.                     }
  65.                 }
  66.               b++;
  67.             }
  68.         a++;
  69.         System.out.println(tabelaFinaltam);
  70.         printar(tabela);
  71.         }
  72.     }
  73.  
  74.     public static void printar(String[] tabela){
  75.      
  76.         int p = 0;
  77.        
  78.         while (p < 101){
  79.             if (tabela[p] != null){
  80.               System.out.printf(p + ":" + tabela[p] + "\n");
  81.             }
  82.           p++;
  83.         }
  84.     }
  85.  
  86.     public static int convHash (String textoint){
  87.         //Conv pra ASCII
  88.         int chaVal = 0;
  89.         int x = 0;
  90.         for (int k = 1; k < (textoint.length() + 1); k++){
  91.             chaVal = (int) textoint.charAt(k-1);
  92.             x += (chaVal * k);
  93.         }
  94.  
  95.         x *= 19;
  96.         x = x % 101;
  97.        
  98.         return x;
  99.     }
  100.  
  101.     public static int antiColisao (int valor, int entradas){
  102.         //Funcao quadrada
  103.         int posicao = (valor + (entradas * entradas) + 23 * entradas);
  104.         posicao = posicao % 101;
  105.        
  106.         return posicao;
  107.     }
  108. }
Add Comment
Please, Sign In to add comment