Advertisement
Guest User

Resenie

a guest
Feb 22nd, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.10 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. class DLL<E> {
  6.     private DLLNode<E> first, last;
  7.  
  8.     public DLL() {
  9.         // Construct an empty SLL
  10.         this.first = null;
  11.         this.last = null;
  12.     }
  13.  
  14.     public void deleteList() {
  15.         first = null;
  16.         last = null;
  17.     }
  18.  
  19.     public int length() {
  20.         int ret;
  21.         if (first != null) {
  22.             DLLNode<E> tmp = first;
  23.             ret = 1;
  24.             while (tmp.succ != null) {
  25.                 tmp = tmp.succ;
  26.                 ret++;
  27.             }
  28.             return ret;
  29.         } else
  30.             return 0;
  31.  
  32.     }
  33.  
  34.     public DLLNode<E> find(E o) {
  35.         if (first != null) {
  36.             DLLNode<E> tmp = first;
  37.             while (tmp.element != o && tmp.succ != null)
  38.                 tmp = tmp.succ;
  39.             if (tmp.element == o) {
  40.                 return tmp;
  41.             } else {
  42.                 System.out.println("Elementot ne postoi vo listata");
  43.             }
  44.         } else {
  45.             System.out.println("Listata e prazna");
  46.         }
  47.         return first;
  48.     }
  49.  
  50.     public void insertFirst(E o) {
  51.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  52.         if (first == null)
  53.             last = ins;
  54.         else
  55.             first.pred = ins;
  56.         first = ins;
  57.     }
  58.  
  59.     public void insertLast(E o) {
  60.         if (first == null)
  61.             insertFirst(o);
  62.         else {
  63.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  64.             last.succ = ins;
  65.             last = ins;
  66.         }
  67.     }
  68.  
  69.     public void insertAfter(E o, DLLNode<E> after) {
  70.         if(after==last){
  71.             insertLast(o);
  72.             return;
  73.         }
  74.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  75.         after.succ.pred = ins;
  76.         after.succ = ins;
  77.     }
  78.  
  79.     public void insertBefore(E o, DLLNode<E> before) {
  80.         if(before == first){
  81.             insertFirst(o);
  82.             return;
  83.         }
  84.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  85.         before.pred.succ = ins;
  86.         before.pred = ins;
  87.     }
  88.  
  89.     public E deleteFirst() {
  90.         if (first != null) {
  91.             DLLNode<E> tmp = first;
  92.             first = first.succ;
  93.             if (first != null) first.pred = null;
  94.             if (first == null)
  95.                 last = null;
  96.             return tmp.element;
  97.         } else
  98.             return null;
  99.     }
  100.  
  101.     public E deleteLast() {
  102.         if (first != null) {
  103.             if (first.succ == null)
  104.                 return deleteFirst();
  105.             else {
  106.                 DLLNode<E> tmp = last;
  107.                 last = last.pred;
  108.                 last.succ = null;
  109.                 return tmp.element;
  110.             }
  111.         }
  112.         // else throw Exception
  113.         return null;
  114.     }
  115.  
  116.     public E delete(DLLNode<E> node) {
  117.         if(node==first){
  118.             deleteFirst();
  119.             return node.element;
  120.         }
  121.         if(node==last){
  122.             deleteLast();
  123.             return node.element;
  124.         }
  125.         node.pred.succ = node.succ;
  126.         node.succ.pred = node.pred;
  127.         return node.element;
  128.  
  129.     }
  130.  
  131.     @Override
  132.     public String toString() {
  133.         String ret = new String();
  134.         if (first != null) {
  135.             DLLNode<E> tmp = first;
  136.             ret += tmp + "<->";
  137.             while (tmp.succ != null) {
  138.                 tmp = tmp.succ;
  139.                 ret += tmp + "<->";
  140.             }
  141.         } else
  142.             ret = "Prazna lista!!!";
  143.         return ret;
  144.     }
  145.  
  146.     public String toStringR() {
  147.         String ret = new String();
  148.         if (last != null) {
  149.             DLLNode<E> tmp = last;
  150.             ret += tmp + "<->";
  151.             while (tmp.pred != null) {
  152.                 tmp = tmp.pred;
  153.                 ret += tmp + "<->";
  154.             }
  155.         } else
  156.             ret = "Prazna lista!!!";
  157.         return ret;
  158.     }
  159.  
  160.     public DLLNode<E> getFirst() {
  161.         return first;
  162.     }
  163.  
  164.     public DLLNode<E> getLast() {
  165.  
  166.         return last;
  167.     }
  168.  
  169.     public void izvadiDupliIPrebroj(){
  170.  
  171.     }
  172. }
  173.  class DLLNode<E> {
  174.      protected E element;
  175.      protected DLLNode<E> pred, succ;
  176.  
  177.      public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  178.          this.element = elem;
  179.          this.pred = pred;
  180.          this.succ = succ;
  181.      }
  182.  
  183.      @Override
  184.      public String toString() {
  185.          return element.toString();
  186.      }
  187.  }
  188.  
  189. class Racer{
  190.     String name;
  191.     int fuel;
  192.  
  193.     public Racer(String name, int fuel) {
  194.         this.name = name;
  195.         this.fuel = fuel;
  196.     }
  197.  
  198.     @Override
  199.     public String toString() {
  200.         return String.format("%s(%d) ", name, fuel);
  201.     }
  202.  
  203.     public void setFuel(int fuel) {
  204.         this.fuel = fuel;
  205.     }
  206. }
  207. /*
  208. 5
  209. Hamilton 2
  210. Vettel 3
  211. Raikkonen 4
  212. Verstappen 3
  213. Leclerc 5
  214. 5
  215. Leclerc 3
  216. Verstappen 5
  217. Raikkonen 4
  218. Vettel 3
  219. Hamilton 2
  220.  */
  221.  
  222.  
  223.  
  224. public class ClassRace {
  225.     public static void main(String[] args) throws IOException {
  226.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  227.         int N = Integer.parseInt(reader.readLine());
  228.         DLL<Racer> list = new DLL<>();
  229.         for (int i = 0; i < N; i++) {
  230.             String[] pomNiza = reader.readLine().split(" ");
  231.             list.insertLast(new Racer(pomNiza[0], Integer.parseInt(pomNiza[1])));
  232.         }
  233.         printRace(list);
  234.        int M = Integer.parseInt(reader.readLine());
  235.  
  236.         for(int i=0;i<M;i++){
  237.             String[] pomNiza = reader.readLine().split(" ");
  238.             Racer racer = new Racer(pomNiza[0], Integer.parseInt(pomNiza[1]));
  239.             list = updateRace(list, racer);
  240.             printRace(list);
  241.         }
  242.  
  243.     }
  244.  
  245.     private static DLL<Racer> updateRace(DLL<Racer> list, Racer racer) {
  246.         DLLNode<Racer> tmp = list.getFirst();
  247.  
  248.         while(tmp!=null) {
  249.  
  250.             if(tmp.element.name.equals(racer.name)){
  251.                 if(tmp.element.fuel >= racer.fuel){
  252.                    tmp.element.setFuel(tmp.element.fuel-racer.fuel);
  253.                  //tuka treba da se pomestuvaat vozacite drugoto se e okej najverojatno
  254.                  //  DLLNode<Racer> tmpInside = tmp.succ;
  255.                      DLLNode<Racer> tmpInside = tmp;//napravi kopija na vozacot  kade sto e i
  256.                                                  // odi za tolku mesta napred kolku sto potrosil fuel
  257.                     for(int i=0;i<racer.fuel;i++) {
  258.                         if(tmpInside==null) break;// tmpInside moze da dojde do null pred for da zavrsi so vrtenje
  259.                         tmpInside=tmpInside.pred;
  260.                     }
  261.                     // postojat 2 uslovi, tmpInside da stigne do vozacot pred koj sto finalno treba da e
  262.                     // ili da fuelot e pogolem od brojot na vozaci pred nego vo toj slucaj tmpInside ke reachne null
  263.                     // dokolku tmpInside stigne null znaci treba da e posleden t.e prv vo trkata
  264.                     if(tmpInside==null) {
  265.                         list.insertFirst(tmp.element);// treba da e last ali deka ja printas obranto ide first vo slucajov
  266.                         list.delete(tmp);
  267.                         return list;
  268.                     }else {
  269.                         //dokolku ne stigne null znaci prestignal 2,3 itn
  270.                         //i treba da se vnese pred toj kade sto stignal for-to
  271.                         list.insertBefore(tmp.element, tmpInside);
  272.                         list.delete(tmp);
  273.                         return list;
  274.                     }
  275.  
  276.                 }
  277.                 else {
  278.                     list.delete(tmp);
  279.                 }
  280.  
  281.             }
  282.  
  283.            tmp=tmp.succ;
  284.         }
  285.         return list;
  286.     }
  287.  
  288.     private static void printRace(DLL<Racer> list){
  289.         DLLNode<Racer> tmp = list.getLast();
  290.  
  291.         while(tmp!=null){
  292.             if(tmp.pred==null){
  293.                 System.out.println(tmp.element.toString());
  294.             }
  295.             else{
  296.                 System.out.print(tmp.element.toString() + "->" + " ");
  297.             }
  298.             tmp = tmp.pred;
  299.         }
  300.     }
  301.  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement