Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Родендени Problem 1
- Во заводот на статистика се прави ново истражување каде што се открива зависноста на месецот на раѓање со имињата на луѓето родени во тој месец. Ваша задача е за даден месец да ги прикажете сите различни имиња на луѓе родени во тој месец.
- Влез: Во првиот ред од влезот е даден бројот на луѓе N (N<=10 000), а во секој нареден ред се дадени името на човекот и датумот на неговото раѓање разделени со празно место. Во последниот ред е даден месецот за кој треба да се прикажат сите различни имиња на луѓето родени во тој месец.
- Излез: Листа со различни имиња на луѓе родени во дадениот месец. Доколку нема луѓе родени во тој месец да се испечати Nema.
- Делумно решение: Задачата се смета за делумно решена доколку се поминати 3 тест примери.
- Забелешка: При реализација на задачите не е дозволено да се користат помошни структури како низи или сл. На располагање од структурите имате само една хеш структура.
- Име на класа (Јава):Rodendeni
- Пример:
- 4
- Ivan 20.7.1976
- Ivan 16.7.1988
- Ana 18.7.1966
- Ivan 5.6.1988
- 7
- Ivan Ana
- */
- import java.util.*;
- import java.io.*;
- class SLLNode<E> {
- protected E element;
- protected SLLNode<E> succ;
- public SLLNode(E elem, SLLNode<E> succ) {
- this.element = elem;
- this.succ = succ;
- }
- @Override
- public String toString() {
- return element.toString();
- }
- }
- class SLL<E> {
- private SLLNode<E> first;
- public SLL() {
- // Construct an empty SLL
- this.first = null;
- }
- public void deleteList() {
- first = null;
- }
- public int length() {
- int ret;
- if (first != null) {
- SLLNode<E> tmp = first;
- ret = 1;
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret++;
- }
- return ret;
- } else {
- return 0;
- }
- }
- @Override
- public String toString() {
- String ret = new String();
- if (first != null) {
- SLLNode<E> tmp = first;
- ret += tmp + " ";
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret += tmp + " ";
- }
- } else {
- ret = "Prazna lista!!!";
- }
- return ret;
- }
- public void insertFirst(E o) {
- SLLNode<E> ins = new SLLNode<E>(o, first);
- first = ins;
- }
- public void insertAfter(E o, SLLNode<E> node) {
- if (node != null) {
- SLLNode<E> ins = new SLLNode<E>(o, node.succ);
- node.succ = ins;
- } else {
- System.out.println("Dadenot jazol e null");
- }
- }
- public void insertBefore(E o, SLLNode<E> before) {
- if (first != null) {
- SLLNode<E> tmp = first;
- if (first == before) {
- this.insertFirst(o);
- return;
- }
- // ako first!=before
- while (tmp.succ != before) {
- tmp = tmp.succ;
- }
- if (tmp.succ == before) {
- SLLNode<E> ins = new SLLNode<E>(o, before);
- tmp.succ = ins;
- } else {
- System.out.println("Elementot ne postoi vo listata");
- }
- } else {
- System.out.println("Listata e prazna");
- }
- }
- public void insertLast(E o) {
- if (first != null) {
- SLLNode<E> tmp = first;
- while (tmp.succ != null) {
- tmp = tmp.succ;
- }
- SLLNode<E> ins = new SLLNode<E>(o, null);
- tmp.succ = ins;
- } else {
- insertFirst(o);
- }
- }
- public E deleteFirst() {
- if (first != null) {
- SLLNode<E> tmp = first;
- first = first.succ;
- return tmp.element;
- } else {
- System.out.println("Listata e prazna");
- return null;
- }
- }
- public E delete(SLLNode<E> node) {
- if (first != null) {
- SLLNode<E> tmp = first;
- if (first == node) {
- return this.deleteFirst();
- }
- while (tmp.succ != node && tmp.succ.succ != null) {
- tmp = tmp.succ;
- }
- if (tmp.succ == node) {
- tmp.succ = tmp.succ.succ;
- return node.element;
- } else {
- System.out.println("Elementot ne postoi vo listata");
- return null;
- }
- } else {
- System.out.println("Listata e prazna");
- return null;
- }
- }
- public SLLNode<E> getFirst() {
- return first;
- }
- public SLLNode<E> find(E o) {
- if (first != null) {
- SLLNode<E> tmp = first;
- while (tmp.element != o && tmp.succ != null) {
- tmp = tmp.succ;
- }
- if (tmp.element == o) {
- return tmp;
- } else {
- System.out.println("Elementot ne postoi vo listata");
- }
- } else {
- System.out.println("Listata e prazna");
- }
- return first;
- }
- public Iterator<E> iterator() {
- // Return an iterator that visits all elements of this list, in left-to-right
- // order.
- return new LRIterator<E>();
- }
- // //////////Inner class ////////////
- private class LRIterator<E> implements Iterator<E> {
- private SLLNode<E> place, curr;
- private LRIterator() {
- place = (SLLNode<E>) first;
- curr = null;
- }
- public boolean hasNext() {
- return (place != null);
- }
- public E next() {
- if (place == null) {
- throw new NoSuchElementException();
- }
- E nextElem = place.element;
- curr = place;
- place = place.succ;
- return nextElem;
- }
- public void remove() {
- // Not implemented
- }
- }
- public void mirror() {
- if (first != null) {
- // m=nextsucc, p=tmp,q=next
- SLLNode<E> tmp = first;
- SLLNode<E> newsucc = null;
- SLLNode<E> next;
- while (tmp != null) {
- next = tmp.succ;
- tmp.succ = newsucc;
- newsucc = tmp;
- tmp = next;
- }
- first = newsucc;
- }
- }
- public void merge(SLL<E> in) {
- if (first != null) {
- SLLNode<E> tmp = first;
- while (tmp.succ != null) {
- tmp = tmp.succ;
- }
- tmp.succ = in.getFirst();
- } else {
- first = in.getFirst();
- }
- }
- }
- public class Rodendeni {
- public static void main(String[] args) throws NumberFormatException, IOException {
- // TODO Auto-generated method stub
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- int n = Integer.parseInt(in.readLine());
- HashMap<Integer, SLL<Vraboten>> table = new HashMap<Integer, SLL<Vraboten>>(13);
- for (int i = 0; i < n; i++) {
- SLL<Vraboten> lista = null;
- String line = in.readLine();
- String[] niza = line.split(" ");
- String ime = niza[0];
- String datum = niza[1];
- Vraboten v = new Vraboten(ime, datum);
- if (table.containsKey(v.getMesec(v))) {
- lista = table.get(v.getMesec(v));
- lista.insertLast(v);
- table.put(v.getMesec(v), lista);
- } else {
- lista = new SLL<Vraboten>();
- lista.insertLast(v);
- table.put(v.getMesec(v), lista);
- }
- }
- int m = Integer.parseInt(in.readLine());
- najdiRodendeni(table, m);
- }
- public static HashMap<Integer, SLL<Vraboten>> brisiDuplikati(HashMap<Integer, SLL<Vraboten>> table, int n) {
- SLL<Vraboten> lista = table.get(n);
- SLLNode<Vraboten> dvizi = lista.getFirst();
- while (dvizi != null) {
- SLLNode<Vraboten> dviziNapred = dvizi.succ;
- while (dviziNapred != null) {
- if (dvizi.element.compareTo(dviziNapred.element) == 1) {
- lista.delete(dviziNapred);
- }
- dviziNapred = dviziNapred.succ;
- }
- dvizi = dvizi.succ;
- }
- return table;
- }
- public static void najdiRodendeni(HashMap<Integer, SLL<Vraboten>> table, int n) {
- if (table.containsKey(n)) {
- brisiDuplikati(table, n);
- SLL<Vraboten> lista = table.get(n);
- SLLNode<Vraboten> dvizi = lista.getFirst();
- while (dvizi != null) {
- System.out.print(dvizi.element.toString() + " ");
- dvizi = dvizi.succ;
- }
- } else {
- System.out.println("Nema");
- }
- }
- }
- class Vraboten implements Comparable<Vraboten> {
- protected String ime;
- protected String datum;
- public Vraboten() {
- }
- public Vraboten(String ime, String datum) {
- this.ime = ime;
- this.datum = datum;
- }
- public int getMesec(Vraboten v) {
- String[] datum = v.datum.split("\\.");
- return Integer.parseInt(datum[1]);
- }
- @Override
- public int compareTo(Vraboten v) {
- if (ime.equals(v.ime)) {
- return 1;
- }
- return 0;
- }
- public String toString() {
- return ime;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement