Advertisement
Guest User

sfajkd

a guest
Mar 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.95 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.util.StringTokenizer;
  3.  
  4.  
  5. class Node {
  6.     public String cartao;
  7.     public int saldo;
  8.     public Node left;
  9.     public Node right;
  10.     public float priority;
  11.  
  12.     Node(String cartao, int saldo) {
  13.         this.cartao = cartao;
  14.         this.saldo = saldo;
  15.         left = null;
  16.         right = null;
  17.         /*this.priority = Math.random();*/
  18.         this.priority = (float)(((int)(Math.random() * 100)) * 0.01);
  19.     }
  20.    
  21.     Node(String cartao, int saldo, Node l, Node r) {
  22.         this.cartao = cartao;
  23.         this.saldo = saldo;
  24.         left = l;
  25.         right = r;
  26.         /*this.priority = Math.random();*/
  27.         this.priority = (float)(((int)(Math.random() * 100)) * 0.01);
  28.  
  29.     }
  30.  
  31.     int compareTo(String cartao) {
  32.         return this.cartao.compareTo(cartao);
  33.     }
  34.  
  35.     int compareTo(Node otherNode) {
  36.         return this.compareTo(otherNode.cartao);
  37.     }
  38. }
  39.  
  40.  
  41. class TREAP{
  42.    
  43.     protected Node root = null;
  44.    
  45.     public TREAP() {
  46.         root = null;
  47.     }
  48.    
  49.     public TREAP (Node no) {
  50.         root = no;
  51.     }
  52.    
  53.     public TREAP(String cartao, int saldo) {
  54.         root = new Node(cartao, saldo);
  55.     }
  56.  
  57.  
  58.     public Node get(Node no) {
  59.  
  60.         return this.get(no.cartao);
  61.     }
  62.    
  63.     public Node get(String cartao) {
  64.         Node no = root;
  65.         while (no != null) {
  66.             if (no.compareTo(cartao) == 0) {
  67.                 return no;
  68.             }
  69.             no = ((no.compareTo(cartao) > 0) ? no.left : no.right);
  70.         }
  71.         return null;
  72.     }
  73.    
  74.  
  75.     Node rightrotation (Node no){
  76.         Node k = no.left;
  77.         Node j = k.right;
  78.        
  79.         k.right = no;
  80.         no.left = j;
  81.        
  82.         return k;
  83.     }
  84.    
  85.     Node leftrotation (Node no){
  86.         Node j = no.right;
  87.         Node k = j.left;
  88.        
  89.         j.left = no;
  90.         no.right = k;
  91.        
  92.         return j;
  93.     }
  94.    
  95.  
  96.     public void add(String cartao, int saldo) {
  97.         root = add(cartao, saldo, root);
  98.         return;
  99.     }
  100.    
  101.     public Node add(String cartao, int valor, Node no) {
  102.    
  103.         if (no == null) {
  104.             return new Node (cartao, valor);
  105.         }
  106.    
  107.         if (no.compareTo(cartao) == 0){
  108.             no.saldo += valor;
  109.         }
  110.        
  111.         else{
  112.             if (no.compareTo(cartao) > 0){
  113.                 no.left = add(cartao, valor, no.left);
  114.  
  115.                 if (no.left.priority > no.priority)
  116.                     no = rightrotation(no);
  117.             }
  118.  
  119.             else{
  120.                 no.right = add(cartao, valor, no.right);
  121.  
  122.                 if (no.right.priority > no.priority)
  123.                     no = leftrotation(no);
  124.         }
  125.     }
  126.         return no;
  127.     }
  128.    
  129.    
  130.     public void remove(Node no) {
  131.         remove(no.cartao);
  132.     }
  133.    
  134.     public void remove(String cartao){
  135.         root = remove(root, cartao);
  136.     }
  137.    
  138.     public Node remove (Node no, String cartao){
  139.        
  140.         if (no == null)
  141.             return null;
  142.        
  143.         if (no.compareTo(cartao) == 0) {
  144.             if (no.left == null) {
  145.                 return no.right;
  146.             } else if (no.right == null) {
  147.                 return no.left;
  148.             } else {
  149.                 if(no.left.priority < no.right.priority){
  150.                     no = leftrotation(no);
  151.                     no.left = remove(no.left, cartao);
  152.                 }
  153.                 else{
  154.                     no = rightrotation(no);
  155.                     no.right = remove(no.right, cartao);
  156.                 }
  157.             }
  158.         } else {                    
  159.             if (no.compareTo(cartao) > 0) {
  160.                 no.left = remove(no.left, cartao);
  161.             } else {   
  162.                 no.right = remove(no.right, cartao);
  163.             }
  164.         }
  165.        
  166.        
  167.         return no;
  168.     }
  169.    
  170.     void printInOrder(){
  171.         printInOrder(root);
  172.     }
  173.    
  174.     void printInOrder(Node no){
  175.         if (no==null)
  176.             return;
  177.         printInOrder(no.left);
  178.         System.out.println(no.cartao + " SALDO " + no.saldo);
  179.         printInOrder(no.right);
  180.     }
  181.    
  182. }
  183.  
  184.  
  185. public class FichaTP1_D {
  186.  
  187.     static String readLn (int maxLg){
  188.         byte lin[] = new byte [maxLg];
  189.         int lg = 0, car = -1;
  190.         String line = "";
  191.         try {
  192.             while (lg < maxLg){
  193.                 car = System.in.read();
  194.                 if ((car < 0) || (car == '\n')) break;
  195.                 lin [lg++] += car;
  196.             }
  197.         }
  198.         catch (IOException e){
  199.             return (null);
  200.         }
  201.         if ((car < 0) && (lg == 0)) return (null);
  202.         return (new String (lin, 0, lg));
  203.     }
  204.  
  205.     public static void main(String[] args) {        
  206.        
  207.         String input, comando;
  208.         int contribuinte, valor;
  209.         String cartao;
  210.     StringTokenizer st;
  211.        
  212.         TREAP tree = new TREAP();
  213.         do {
  214.             input = readLn(200);
  215.             st= new StringTokenizer(input.trim());
  216.             comando = st.nextToken();
  217.             if (comando.equals("UPDATE")){
  218.                 cartao = new String(st.nextToken());
  219.                 valor = Integer.parseInt(st.nextToken());
  220.                 tree.add (cartao, valor);
  221.             }
  222.             else if (comando.equals("SALDO")){
  223.                 cartao = new String(st.nextToken());
  224.                 Node no = tree.get(cartao);
  225.                 if (no==null)
  226.                     System.out.println(cartao + " INEXISTENTE");
  227.                 else
  228.                     System.out.println(cartao + " SALDO " + no.saldo);
  229.             }
  230.             else if (comando.equals("REMOVE")){
  231.                 cartao = new String(st.nextToken());
  232.                 tree.remove(cartao);
  233.             }
  234.             else if (comando.equals("IMPRIME")){
  235.                 tree.printInOrder();
  236.             }
  237.             else if (comando.equals("TERMINA"))
  238.                 return;
  239.         } while (true);
  240.     }
  241.        
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement