Advertisement
fensa08

[APS] ISPITNA JANUARI 2014

Sep 18th, 2019
635
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.62 KB | None | 0 0
  1. Поништување топчиња Задача 1 (0 / 0)
  2. Да се напише алгоритам со кој ќе се имплементира играта “Поништување топчиња”. Во оваа игра на располагање имате топчиња во три различни бои (R-црвена, G-зелена и B-сина), обележани со знакот + или -. Поништување на топчиња може да настане само доколку тие се од иста боја и со спротивен знак. На почеток се генерира една случајна листа со топчиња. Ваша задача е од тој влез, како доаѓаат топчињата да направите поништување и да кажете колку, од каков тип (+ или -) и од која боја фалат за да се поништат сите топчиња од влезот.
  3.  
  4. Влез: Листа од случајни топчиња и тоа во облик: боја, знак
  5.  
  6. Име на класата (Java): Topcinja
  7.  
  8. Делумно решение: Задачата се смета за делумно решена доколку се поминати 5 тест примери.
  9.  
  10. Забелешка: При реализација на задачите МОРА да се користат дадените структури, а не да се користат помошни структури како низи или сл.
  11.  
  12. Пример влез: R+ G- G+ G+ R+ B- B+ R- G+ R- B- B+ B+ R+
  13.  
  14. Парови кои може да се формираат од овој список се: (R+,R-); (B+, B-); (B- B+); (R+, R-); (G-, G+); (R+, R-)
  15.  
  16. Остануваат без партнер: G+, G+, B+, R+
  17.  
  18. Излез:
  19.  
  20. 4
  21.  
  22. R- G- G- B+
  23.  
  24. ==========================================================================================================================================
  25.  
  26. import java.io.BufferedReader;
  27. import java.io.IOException;
  28. import java.io.InputStreamReader;
  29. import java.util.NoSuchElementException;
  30.  
  31. class Scratch {
  32.  
  33.  
  34.     static interface Queue<E> {
  35.  
  36.         // Elementi na redicata se objekti od proizvolen tip.
  37.  
  38.         // Metodi za pristap:
  39.  
  40.         public boolean isEmpty ();
  41.         // Vrakja true ako i samo ako redicata e prazena.
  42.  
  43.         public int size ();
  44.         // Ja vrakja dolzinata na redicata.
  45.  
  46.         public E peek ();
  47.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  48.  
  49.         // Metodi za transformacija:
  50.  
  51.         public void clear ();
  52.         // Ja prazni redicata.
  53.  
  54.         public void enqueue (E x);
  55.         // Go dodava x na kraj od redicata.
  56.  
  57.         public E dequeue ();
  58.         // Go otstranuva i vrakja pochetniot element na redicata.
  59.  
  60.     }
  61.  
  62.     static class LinkedQueue<E> implements Queue<E> {
  63.  
  64.         // Redicata e pretstavena na sledniot nacin:
  65.         // length go sodrzi brojot na elementi.
  66.         // Elementite se zachuvuvaat vo jazli dod SLL
  67.         // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  68.         SLLNode<E> front, rear;
  69.         int length;
  70.  
  71.         // Konstruktor ...
  72.  
  73.         public LinkedQueue () {
  74.             clear();
  75.         }
  76.  
  77.         public boolean isEmpty () {
  78.             // Vrakja true ako i samo ako redicata e prazena.
  79.             return (length == 0);
  80.         }
  81.  
  82.         public int size () {
  83.             // Ja vrakja dolzinata na redicata.
  84.             return length;
  85.         }
  86.  
  87.         public E peek () {
  88.             // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  89.             if (front == null)
  90.                 throw new NoSuchElementException();
  91.             return front.element;
  92.         }
  93.  
  94.         public void clear () {
  95.             // Ja prazni redicata.
  96.             front = rear = null;
  97.             length = 0;
  98.         }
  99.  
  100.         public void enqueue (E x) {
  101.             // Go dodava x na kraj od redicata.
  102.             SLLNode<E> latest = new SLLNode<E>(x, null);
  103.             if (rear != null) {
  104.                 rear.succ = latest;
  105.                 rear = latest;
  106.             } else
  107.                 front = rear = latest;
  108.             length++;
  109.         }
  110.  
  111.         public E dequeue () {
  112.             // Go otstranuva i vrakja pochetniot element na redicata.
  113.             if (front != null) {
  114.                 E frontmost = front.element;
  115.                 front = front.succ;
  116.                 if (front == null)  rear = null;
  117.                 length--;
  118.                 return frontmost;
  119.             } else
  120.                 throw new NoSuchElementException();
  121.         }
  122.  
  123.     }
  124.  
  125.  
  126.     static class SLLNode<E> {
  127.         protected E element;
  128.         protected SLLNode<E> succ;
  129.  
  130.         public SLLNode(E elem, SLLNode<E> succ) {
  131.             this.element = elem;
  132.             this.succ = succ;
  133.         }
  134.  
  135.         @Override
  136.         public String toString() {
  137.             return element.toString();
  138.         }
  139.     }
  140.  
  141.  
  142.     static interface Stack<E> {
  143.  
  144.         // Elementi na stekot se objekti od proizvolen tip.
  145.  
  146.         // Metodi za pristap:
  147.  
  148.         public boolean isEmpty ();
  149.         // Vrakja true ako i samo ako stekot e prazen.
  150.  
  151.         public E peek ();
  152.         // Go vrakja elementot na vrvot od stekot.
  153.  
  154.         // Metodi za transformacija:
  155.  
  156.         public void clear ();
  157.         // Go prazni stekot.
  158.  
  159.         public void push (E x);
  160.         // Go dodava x na vrvot na stekot.
  161.  
  162.         public E pop ();
  163.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  164.     }
  165.  
  166.  
  167.     static class LinkedStack<E> implements Stack<E> {
  168.  
  169.         //Stekot e pretstaven na sledniot nacin: top e link do prviot jazol
  170.         // na ednostrano-povrzanata lista koja sodrzi gi elementite na stekot .
  171.         private SLLNode<E> top;
  172.  
  173.         public LinkedStack () {
  174.             // Konstrukcija na nov, prazen stek.
  175.             top = null;
  176.         }
  177.  
  178.         public boolean isEmpty () {
  179.             // Vrakja true ako i samo ako stekot e prazen.
  180.             return (top == null);
  181.         }
  182.  
  183.         public E peek () {
  184.             // Go vrakja elementot na vrvot od stekot.
  185.             if (top == null)
  186.                 throw new NoSuchElementException();
  187.             return top.element;
  188.         }
  189.  
  190.         public void clear () {
  191.             // Go prazni stekot.
  192.             top = null;
  193.         }
  194.  
  195.         public void push (E x) {
  196.             // Go dodava x na vrvot na stekot.
  197.             top = new SLLNode<E>(x, top);
  198.         }
  199.  
  200.         public E pop () {
  201.             // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  202.             if (top == null)
  203.                 throw new NoSuchElementException();
  204.             E topElem = top.element;
  205.             top = top.succ;
  206.             return topElem;
  207.         }
  208.  
  209.     }
  210.  
  211.  
  212.     public static void main(String[] args) throws IOException {
  213.  
  214.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  215.         String line = in.readLine();
  216.         String pom[] = line.split(" ");
  217.  
  218.  
  219.         LinkedStack<String> r = new LinkedStack<>();
  220.         LinkedStack<String> g = new LinkedStack<>();
  221.         LinkedStack<String> b = new LinkedStack<>();
  222.  
  223.         for(int i = 0; i < pom.length;i++){
  224.             if(pom[i].charAt(0) == 'R'){
  225.                 r.push(pom[i]);
  226.             }
  227.             else if(pom[i].charAt(0) == 'G'){
  228.                 g.push(pom[i]);
  229.             }
  230.             else if(pom[i].charAt(0) == 'B'){
  231.                 b.push(pom[i]);
  232.             }
  233.         }
  234.  
  235.  
  236.         //
  237.         LinkedQueue<String> nepareni = new LinkedQueue<>();
  238.  
  239.         // r stek
  240.         LinkedQueue<String> pomosna = new LinkedQueue<>();
  241.         while(!r.isEmpty()){
  242.             String el = r.pop();
  243.             if(pomosna.isEmpty()){
  244.                 pomosna.enqueue(el);
  245.             }else{
  246.                 // ima elementi sporedi so prviot
  247.                 String el2 = pomosna.dequeue();
  248.                 if(el2.charAt(1) == el.charAt(1)){
  249.                     pomosna.enqueue(el);
  250.                     pomosna.enqueue(el2);
  251.                 }
  252.             }
  253.         }
  254.  
  255.         // r stek
  256.         LinkedQueue<String> pomosna2 = new LinkedQueue<>();
  257.         while(!g.isEmpty()){
  258.             String el = g.pop();
  259.             if(pomosna2.isEmpty()){
  260.                 pomosna2.enqueue(el);
  261.             }else{
  262.                 // ima elementi sporedi so prviot
  263.                 String el2 = pomosna2.dequeue();
  264.                 if(el2.charAt(1) == el.charAt(1)){
  265.                     pomosna2.enqueue(el);
  266.                     pomosna2.enqueue(el2);
  267.                 }
  268.             }
  269.         }
  270.  
  271.  
  272.  
  273.  
  274.  
  275.         // r stek
  276.         LinkedQueue<String> pomosna3 = new LinkedQueue<>();
  277.         while(!b.isEmpty()){
  278.             String el = b.pop();
  279.             if(pomosna3.isEmpty()){
  280.                 pomosna3.enqueue(el);
  281.             }else{
  282.                 // ima elementi sporedi so prviot
  283.                 String el2 = pomosna3.dequeue();
  284.                 if(el2.charAt(1) == el.charAt(1)){
  285.                     pomosna3.enqueue(el);
  286.                     pomosna3.enqueue(el2);
  287.                 }
  288.             }
  289.         }
  290.  
  291.         while(!pomosna.isEmpty()){
  292.             nepareni.enqueue(pomosna.dequeue());
  293.         }
  294.  
  295.  
  296.         while(!pomosna2.isEmpty()){
  297.             nepareni.enqueue(pomosna2.dequeue());
  298.         }
  299.  
  300.  
  301.         while(!pomosna3.isEmpty()){
  302.             nepareni.enqueue(pomosna3.dequeue());
  303.         }
  304.  
  305.         System.out.println(nepareni.length);
  306.         while (!nepareni.isEmpty()){
  307.             System.out.print(nepareni.dequeue()+ " ");
  308.         }
  309.  
  310.  
  311.        
  312.  
  313.     }
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement