Advertisement
fensa08

[APS] ISPITNA JUNI 2014

Sep 18th, 2019
935
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.56 KB | None | 0 0
  1. APS 13.06.2014:
  2.  
  3. Спои листи Problem 1 (0 / 0)
  4. Дадени се две двострано поврзани листи чии што јазли содржат по еден природен број.
  5. Од овие две листи треба да се креира нова двострано поврзана листа,
  6. на тој начин што јазлите ќе се додаваат наизменично и тоа само оние со парни броеви
  7.  (прв елемент од првата листа (ако е парен), последен од втората (ако е парен),
  8. втор елемент од првата листа (ако е парен), претпоследен од втората (ако е парен) итн.).
  9. Јазлите со парни броеви кои ќе останат треба да се додадат на крај во резултантната листа.
  10. Потоа на резултантната листа се додаваат само преостанатите јазли со непарни елементи од
  11. првата листа и преостанатите јазли со непарни елементи но во обратен редослед од втората листа.
  12.  
  13. Освен наведените три листи немате право на користење на дополнителни помошни листи.
  14.  
  15. Во првиот ред од влезот е даден бројот на јазли во првата листа, потоа во вториот ред се дадени
  16. броевите од кои се составени јазлите по редослед во првата листа, па во третиот ред е даден
  17. бројот на јазли во втората листа, и на крај во четвртиот ред броевите од кои се составени јазлите
  18. по редослед во втората листа. На излез треба да се испечатат јазлите по редослед во
  19. резултантната споена листа.
  20.  
  21. Забелешка: При реализација на задачите МОРА да се користат дадените структури,
  22. а не да се користат помошни структури како низи или сл.
  23.  
  24. Делумно решение: Задачата се смета за делумно решена доколку се поминати 7 тест примери.
  25.  
  26. Име на класата: SpoiListi
  27.  
  28.  
  29. Sample input
  30. 20
  31. 18 5 77 5 57 15 27 43 26 0 31 61 50 63 34 25 52 4 72 24
  32. 50
  33. 90 31 93 52 40 13 8 77 43 82 71 99 95 56 13 30 4 14 10 27 33 12 18 52 5 59 48 25 80 84 57 2 64 94 4 62 7 68 77 64 27 7 39 91 59 24 87 95 22 28
  34. Sample output
  35. 18 28 22 24 26 0 64 50 68 34 62 4 52 94 4 64 72 2 24 84 80 48 52 18 12 10 14 4 30 56 82 8 40 52 90 5 77 5 57 15 27 43 31 61 63 25 95 87 59 91 39 7 27 77 7 57 25 59 5 33 27 13 95 99 71 43 77 13 93 31
  36.  
  37.  
  38. =========================================================================================================================================
  39. package mojsadsada;
  40.  
  41.  
  42.  
  43. import java.io.BufferedReader;
  44. import java.io.IOException;
  45. import java.io.InputStreamReader;
  46.  
  47.  
  48. class DLLNode<E> {
  49.     protected E element;
  50.     protected DLLNode<E> pred, succ;
  51.  
  52.     public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  53.         this.element = elem;
  54.         this.pred = pred;
  55.         this.succ = succ;
  56.     }
  57.  
  58.     @Override
  59.     public String toString() {
  60.         return element.toString();
  61.     }
  62. }
  63.  
  64. class DLL<E> {
  65.     private DLLNode<E> first, last;
  66.  
  67.     public DLL() {
  68.         // Construct an empty SLL
  69.         this.first = null;
  70.         this.last = null;
  71.     }
  72.  
  73.     public void deleteList() {
  74.         first = null;
  75.         last = null;
  76.     }
  77.  
  78.     public int length() {
  79.         int ret;
  80.         if (first != null) {
  81.             DLLNode<E> tmp = first;
  82.             ret = 1;
  83.             while (tmp.succ != null) {
  84.                 tmp = tmp.succ;
  85.                 ret++;
  86.             }
  87.             return ret;
  88.         } else
  89.             return 0;
  90.  
  91.     }
  92.  
  93.     public void insertFirst(E o) {
  94.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  95.         if (first == null)
  96.             last = ins;
  97.         else
  98.             first.pred = ins;
  99.         first = ins;
  100.     }
  101.  
  102.     public void insertLast(E o) {
  103.         if (first == null)
  104.             insertFirst(o);
  105.         else {
  106.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  107.             last.succ = ins;
  108.             last = ins;
  109.         }
  110.     }
  111.  
  112.     public void insertAfter(E o, DLLNode<E> after) {
  113.         if (after == last) {
  114.             insertLast(o);
  115.             return;
  116.         }
  117.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  118.         after.succ.pred = ins;
  119.         after.succ = ins;
  120.     }
  121.  
  122.     public void insertBefore(E o, DLLNode<E> before) {
  123.         if (before == first) {
  124.             insertFirst(o);
  125.             return;
  126.         }
  127.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  128.         before.pred.succ = ins;
  129.         before.pred = ins;
  130.     }
  131.  
  132.     public E deleteFirst() {
  133.         if (first != null) {
  134.             if (first.succ == null){
  135.                 last = null;
  136.                 first = null;
  137.             }
  138.             else{
  139.                 DLLNode<E> tmp = first;
  140.                 first = first.succ;
  141.                 first.pred = null;
  142.                 return tmp.element;
  143.             }
  144.         }
  145.         return null;
  146.     }
  147.  
  148.     public E deleteLast() {
  149.         if (first != null) {
  150.             if (first.succ == null)
  151.                 return deleteFirst();
  152.             else {
  153.                 DLLNode<E> tmp = last;
  154.                 last = last.pred;
  155.                 last.succ = null;
  156.                 return tmp.element;
  157.             }
  158.         }
  159.         // else throw Exception
  160.         return null;
  161.     }
  162.  
  163.     @Override
  164.     public String toString() {
  165.         String ret = new String();
  166.         if (first != null) {
  167.             DLLNode<E> tmp = first;
  168.             ret += tmp + "<->";
  169.             while (tmp.succ != null) {
  170.                 tmp = tmp.succ;
  171.                 ret += tmp + "<->";
  172.             }
  173.         } else
  174.             ret = "Prazna lista!!!";
  175.         return ret;
  176.     }
  177.  
  178.     public DLLNode<E> getFirst() {
  179.         return first;
  180.     }
  181.  
  182.     public DLLNode<E> getLast() {
  183.  
  184.         return last;
  185.     }
  186.  
  187. }
  188.  
  189. class SpoiListi  {
  190.  
  191.  
  192.     public static DLL<Integer> mergeLists(DLL<Integer> list1, DLL<Integer> list2){
  193.  
  194.         // 2 pokazuvaci, 1 zalapen za poceokt na 1, 2 za kraj na 2
  195.         DLLNode<Integer> p1 = list1.getFirst();
  196.         DLLNode<Integer> p2 = list2.getLast();
  197.         DLL<Integer> rezz = new DLL<Integer>();
  198.  
  199.         // dodeka 2ta ne se nulevi
  200.         while(p1 != null && p2 != null){
  201.             if(p1.element % 2 == 0){
  202.                 rezz.insertLast(p1.element);
  203.             }
  204.             p1 = p1.succ;
  205.  
  206.             if(p2.element % 2 == 0){
  207.                 rezz.insertLast(p2.element);
  208.             }
  209.             p2 = p2.pred;
  210.  
  211.         }
  212.  
  213.  
  214.         // ako 1 ne e null, dodavaj parni
  215.         if(p1 != null){
  216.             while(p1 != null){
  217.                 if(p1.element %2 == 0){
  218.                     rezz.insertLast(p1.element);
  219.                 }
  220.                 p1 = p1.succ;
  221.             }
  222.         }
  223.         // ako 2 ne e null dodavaj neparni
  224.         if(p2 != null){
  225.             while(p2 != null){
  226.                 if(p2.element % 2 == 0){
  227.                     rezz.insertLast(p2.element);
  228.                 }
  229.                 p2 = p2.pred;
  230.             }
  231.         }
  232.  
  233.         // dodavaj ostala raja
  234.  
  235.         p1 = list1.getFirst();
  236.         p2 = list2.getLast();
  237.         while( p1 != null && p2 != null){
  238.  
  239.             if(p1.element % 2 != 0)
  240.                     rezz.insertLast(p1.element);
  241.  
  242.             p1 = p1.succ;
  243.  
  244.             if(p2.element % 2 != 0)
  245.                 rezz.insertLast(p2.element);
  246.  
  247.             p2 = p2.pred;
  248.  
  249.         }
  250.  
  251.         // ako 1 ne e null, dodavaj parni
  252.         if(p1 != null){
  253.             while(p1 != null){
  254.                 if(p1.element %2 != 0){
  255.                     rezz.insertLast(p1.element);
  256.                 }
  257.                 p1 = p1.succ;
  258.             }
  259.         }
  260.         // ako 2 ne e null dodavaj neparni
  261.         if(p2 != null){
  262.             while(p2 != null){
  263.                 if(p2.element % 2 != 0){
  264.                     rezz.insertLast(p2.element);
  265.                 }
  266.                 p2 = p2.pred;
  267.             }
  268.         }
  269.  
  270.         return rezz;
  271.  
  272.     }
  273.  
  274.     public static void main(String[] args) throws IOException {
  275.         DLL<Integer> lista1 = new DLL<Integer>(), lista2 = new DLL<Integer>();
  276.         BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  277.         String s = stdin.readLine();
  278.         int N = Integer.parseInt(s);
  279.         s = stdin.readLine();
  280.         String[] pomniza = s.split(" ");
  281.         for (int i = 0; i < N; i++) {
  282.             lista1.insertLast(Integer.parseInt(pomniza[i]));
  283.         }
  284.  
  285.         s = stdin.readLine();
  286.         N = Integer.parseInt(s);
  287.         s = stdin.readLine();
  288.         pomniza = s.split(" ");
  289.         for (int i = 0; i < N; i++) {
  290.             lista2.insertLast(Integer.parseInt(pomniza[i]));
  291.         }
  292.  
  293.         //vasiot kod tuka!
  294.  
  295.         DLL<Integer> nova = mergeLists(lista1,lista2);
  296.         DLLNode<Integer> p = nova.getFirst();
  297.         while(p!= null){
  298.             System.out.print(p.element + " ");
  299.             p = p.succ;
  300.         }
  301.  
  302.     }
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement