Advertisement
fensa08

[APS] Lista od Listi

Sep 17th, 2019
1,370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.75 KB | None | 0 0
  1. Листа од листи Problem 3 (3 / 5)
  2.  
  3. Дадена е двојно поврзана листа од двојно поврзани листи. Да се најде сума на секоја од подлистите, а потоа производ на овие суми
  4.  
  5. Влез: Број N кој кажува колку листи има Број М кој кажува колку елементи има во секоја листа Во следните М линии се податоците 1<=A<=1000за секоја од листите
  6.  
  7. Излез: Еден број што е производот на сумите од низите. Со седум децимали.
  8.  
  9. Пример влез: 3 4 1 2 3 4 2 3 4 5 6 7 8 9
  10.  
  11. Излез: 1400
  12.  
  13. =======================================================================================================================================
  14.  
  15. import java.io.BufferedReader;
  16. import java.io.IOException;
  17. import java.io.InputStreamReader;
  18.  
  19. import java.util.Scanner;
  20.  
  21. class DLLNode<E> {
  22.     protected E element;
  23.     protected DLLNode<E> pred, succ;
  24.  
  25.     public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  26.         this.element = elem;
  27.         this.pred = pred;
  28.         this.succ = succ;
  29.     }
  30.  
  31.     @Override
  32.     public String toString() {
  33.         return "<-" + element.toString() + "->";
  34.     }
  35. }
  36.  
  37. class DLL<E> {
  38.     private DLLNode<E> first, last;
  39.  
  40.     public DLL() {
  41.         // Construct an empty SLL
  42.         this.first = null;
  43.         this.last = null;
  44.     }
  45.  
  46.     public void deleteList() {
  47.         first = null;
  48.         last = null;
  49.     }
  50.  
  51.     public int length() {
  52.         int ret;
  53.         if (first != null) {
  54.             DLLNode<E> tmp = first;
  55.             ret = 1;
  56.             while (tmp.succ != null) {
  57.                 tmp = tmp.succ;
  58.                 ret++;
  59.             }
  60.             return ret;
  61.         } else
  62.             return 0;
  63.  
  64.     }
  65.  
  66.     public void insertFirst(E o) {
  67.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  68.         if (first == null)
  69.             last = ins;
  70.         else
  71.             first.pred = ins;
  72.         first = ins;
  73.     }
  74.  
  75.     public void insertLast(E o) {
  76.         if (first == null)
  77.             insertFirst(o);
  78.         else {
  79.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  80.             last.succ = ins;
  81.             last = ins;
  82.         }
  83.     }
  84.  
  85.     public void insertAfter(E o, DLLNode<E> after) {
  86.         if (after == last) {
  87.             insertLast(o);
  88.             return;
  89.         }
  90.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  91.         after.succ.pred = ins;
  92.         after.succ = ins;
  93.     }
  94.  
  95.     public void insertBefore(E o, DLLNode<E> before) {
  96.         if (before == first) {
  97.             insertFirst(o);
  98.             return;
  99.         }
  100.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  101.         before.pred.succ = ins;
  102.         before.pred = ins;
  103.     }
  104.  
  105.     public E deleteFirst() {
  106.         if (first != null) {
  107.             DLLNode<E> tmp = first;
  108.             first = first.succ;
  109.             if (first != null) first.pred = null;
  110.             if (first == null)
  111.                 last = null;
  112.             return tmp.element;
  113.         } else
  114.             return null;
  115.     }
  116.  
  117.     public E deleteLast() {
  118.         if (first != null) {
  119.             if (first.succ == null)
  120.                 return deleteFirst();
  121.             else {
  122.                 DLLNode<E> tmp = last;
  123.                 last = last.pred;
  124.                 last.succ = null;
  125.                 return tmp.element;
  126.             }
  127.         }
  128.         // else throw Exception
  129.         return null;
  130.     }
  131.  
  132.     @Override
  133.     public String toString() {
  134.         String ret = new String();
  135.         if (first != null) {
  136.             DLLNode<E> tmp = first;
  137.             ret += tmp + "<->";
  138.             while (tmp.succ != null) {
  139.                 tmp = tmp.succ;
  140.                 ret += tmp + "<->";
  141.             }
  142.         } else
  143.             ret = "Prazna lista!!!";
  144.         return ret;
  145.     }
  146.  
  147.     public DLLNode<E> getFirst() {
  148.         return first;
  149.     }
  150.  
  151.     public DLLNode<E> getLast() {
  152.  
  153.         return last;
  154.     }
  155.  
  156. }
  157.  
  158. public class ListaOdListi {
  159.  
  160.      public static long findMagicNumber(DLL<DLL<Integer>> list) {
  161.  
  162.         //Vashiot kod tuka...
  163.  
  164.         DLLNode<DLL<Integer>> pok = list.getFirst();
  165.         DLL<Integer>  sumi = new DLL<Integer>();
  166.  
  167.         // gi pribavuva sumite
  168.         while( pok != null){
  169.             // pokazuvac za podlisti
  170.             int suma = 0;
  171.             DLLNode<Integer> p2 = pok.element.getFirst();
  172.             while(p2 != null){
  173.             // pokazuvac za elementi na podlista
  174.                 suma += p2.element;
  175.                 p2 = p2.succ;
  176.             }
  177.             sumi.insertLast(suma);
  178.             pok = pok.succ;
  179.  
  180.         }
  181.  
  182.         // izmnozi gi sega
  183.         long proizvod = 1;
  184.         DLLNode<Integer> p = sumi.getFirst();
  185.         while (p != null) {
  186.             proizvod *= p.element;
  187.             p = p.succ;
  188.         }
  189.  
  190.         return proizvod;
  191.  
  192.     }
  193.  
  194.     public static void main(String[] args) throws IOException {
  195.  
  196.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  197.         int n = Integer.parseInt(in.readLine());
  198.         int m = Integer.parseInt(in.readLine());
  199.  
  200.         DLL<DLL<Integer>> listaOdListi = new DLL<>();
  201.  
  202.         for(int i = 0; i < n ; i++){
  203.             String line = in.readLine();
  204.             String pom[] = line.split(" ");
  205.  
  206.             DLL<Integer> podLista = new DLL<>();
  207.             for(String s: pom){
  208.                 podLista.insertLast(Integer.parseInt(s));
  209.             }
  210.             listaOdListi.insertLast(podLista);
  211.         }
  212.  
  213.         System.out.println(findMagicNumber(listaOdListi));
  214.  
  215.     }
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement