• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

algorytm kto moze pomoc rozwiazac?

VPS Starter Arubacloud
+1 głos
771 wizyt
pytanie zadane 19 października 2019 w C i C++ przez niezalogowany

Partycja odkryła straszną prawdę. Światem od wieków rządzą tajne organizacje. Nasza bohaterka uwielbia demaskować ich tajemnice. Podobno na odwrocie deklaracji podległości spisanej przez samych ojców stworzycieli jest zapisany szyfr. Dotarcie do niego zajęło naszej bohaterce nieco czasu. Wykorzystując znajomości udało się jej otrzymać tajną fotografię dokumentu od konserwatorki. Oczom Partycji ukazał się jednak dziwny zestaw słów oraz cyfr. Postanowiła, że ze swoim problemem uda się do znanego historyka specjalizującego się w starych szyfrach. Specjalista przyjrzał się dokumentowi i rzekł:

- Widziałem już kiedyś taki szyfr. Używały go tajne organizacje wiele lat temu. Jak widzisz mamy dwa zestawy słów. Pierwszy składa się z par zbudowanych z jednego słowa oraz liczby. Dla ułatwienia liczbę z pary będziemy nazywać wartością słowa. Poruszamy się po liście słów przechodząc od jednego do następnego, dodając je do zdania wynikowego. Wartość w parze oznacza o ile słów od obecnego należy się przesunąć. Jeżeli jest ona dodatnia poruszamy się zgodnie z kierunkiem wprowadzania. Gdyby jednak wartość była ujemna poruszamy się w kierunku przeciwnym. Jeżeli dotrzesz do końca listy przeglądanie rozpoczynasz z drugiej strony. Pamiętaj jednak, że każde słowo może być użyte tylko raz. Przeglądanie powinno zostać rozpoczęte od ustalonego numerem słowa.

- Więc do czego jest ta druga lista słów?

- Jeżeli podczas przeglądania pierwszej listy trafisz na słowo którego wartość jest równa 0 to zamiast dodawać ją do wynikowego zdania należy dodać nowe słowo do listy jako poprzednik obecnie znalezionego zgodnie z kierunkiem wprowadzania. Pobiera się je właśnie z tej drugiej listy. Ponieważ nie zostało jeszcze wykorzystane nie powinno być usuwane. Musisz pamiętać, żeby zmodyfikować wartość znalezionego słowa. Jak widzisz lista słów oczekujących na dodanie oprócz pary ma dodatkową liczbę. To wartość która zastąpi znalezione 0. Na koniec wyszukujesz nowe słowo przemieszczając się właśnie o tą zmodyfikowaną wartość. Możesz być pewna, że ilość słów dodatkowych zawsze jest wystarczająca. Ba, zwykle jest ich nawet za dużo. Wyszukiwanie kończy się kiedy skończą się elementy w pierwszej liście.

Partycja miała już plan. Zostało zatem tylko odczytać szyfr …

Wejście:

Na wejściu program otrzymuje liczbę n oznaczającą rozmiar listy słów oraz s będącą numerem słowa startowego. Następnie w n liniach program otrzymuje parę składającą się z pojedynczego słowa s oraz liczby x. W kolejnym kroku podawana jest liczba p, która określa ilość słów oczekuje na dodanie. Następnie w p liniach program otrzymuję listę oczekujących par s oraz x oraz y, gdzie ostatnia wartość jest liczbą zastępującą 0 które spowodowało dodanie nowego elementu.

Wyjście:

Na wyjściu program powinien wypisać odtworzone zdanie. Działanie kończy się kiedy cała lista zostanie opróżniona.

1 ≤ n ≤ 30000
0 ≤ p ≤ 30000
-1000000 ≤ x, d ≤ 1000000

Przykładowe wejście:

7 5
spadaniem 5
czestym 0
kamien 7
drazy -2
sila 2
Kropla -2
nie -1
3
lecz 1 -5
tak 8 2
syzbko -9 6

Przykładowe wyjście:

Kropla drazy kamien nie sila lecz czestym spadaniem

Uwaga:

Rozwiązanie ma być samodzielną implementacją list bez wykorzystania bibliotek STL.

1 odpowiedź

+3 głosów
odpowiedź 19 października 2019 przez Szahid Pasjonat (20,930 p.)
Ja chętnie pomogę. W czym problem?
1
komentarz 20 października 2019 przez niezalogowany

no trzeba napisac algorytm, i nie wiem jak go napisac

 


 
  

 
          
 

 
 
komentarz 23 października 2019 przez MaciekStaryAlkoholik Nowicjusz (100 p.)
pomożesz czy nie ?
komentarz 23 października 2019 przez tkz Nałogowiec (42,000 p.)
To nie chcesz pomocy, tylko gotowego rozwiązania...
komentarz 24 października 2019 przez niezalogowany
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

class Element{
public:
    string word;
    int number;
    Element *left = NULL;
    Element *right = NULL;
    Element(string word, int d):word(word){
        number = d;
        left = right = this;
    }
};

class ListTwoCyclic{
public:
    Element *link = NULL;
    int size = 0;

    void moveTo(bool left = true){
            if(left) link = link->left;
            else link = link->right;
    }

    void add(string word, int d, bool left = true){
        Element *n = new Element(word, d);
        if(size == 0)
            link = n;
        else{
            Element *l = link->left;
            Element *r = link->right;
            if(left){
                link->left = n;
                n->right = link;
                n->left = l;
                l->right = n;
                if(size == 1) link->right = n;
            }
            else{
                link->right = n;
                n->left = link;
                n->right = r;
                r->left = n;
                if(size == 1) link->left = n;
            }
        }
        ++size;
    }

    bool rmv(){
        if(size == 0) return false;
        if(size == 1){
            delete link;
            link == NULL;
        }
        else{
            Element *temp = link;
            link = link->left;
            link->right = temp->right;
            link->right->left = link;
            delete temp;
        }
        --size;
        return true;
    }

    void show(){
        //if(link) cout << link->word << " " << link->number << endl;
        Element *temp = link;
        if(size){
            for(int i = 0; i < size; ++i){
                    cout << temp->word << " " << temp->number << endl;
                    temp = temp->left;
                }
            }
        }
};

int main()
{
    ListTwoCyclic a;
    int n, s, x, y, p = 0, num;
    string arr, word;
    cin >> n >> s;
    num = s;
    for(int i = 0; i < n; ++i){
        cin >> word >> x;
        a.add(word, x, false);
        if(x == 0) p++;
    }
    for(int j = 0; j < p; ++j)
        cin >> word >> x >> y;
    while(a.size != 0){
        if(num > 0){
            for(int j = 0; j < num; ++j)
                a.moveTo(true);
            if(a.link->number != 0){
                arr += a.link->word;
                arr += " ";
                num = a.link->number;
                a.rmv();
            }
            else{
                a.link->number = y;
                a.add(word, x, false);
                cout << "     ";
                a.show();
                break;
            }
        }
        else if(num < 0){
            num = abs(num);
            for(int k = 0; k < num; ++k)
                a.moveTo(false);
            if(a.link->number != 0){
                arr += a.link->word;
                arr += " ";
                num = a.link->number;
                a.rmv();
            }
            else{
                a.link->number = y;
                a.add(word, x, false);
                cout << "       ";
                a.show();
                break;
            }
        }
    }
    cout << arr << endl;
    return 0;
}

mam cos takiego

 

komentarz 28 października 2019 przez Ambitnystudent Nowicjusz (120 p.)
A ile przechodzi ci testów?
komentarz 31 października 2019 przez niezalogowany
teraz 0

Podobne pytania

0 głosów
0 odpowiedzi 549 wizyt
pytanie zadane 10 maja 2017 w C i C++ przez Ala123456 Użytkownik (760 p.)
0 głosów
1 odpowiedź 330 wizyt
pytanie zadane 26 lutego 2023 w Rozwój zawodowy, nauka, praca przez qwert 100 Obywatel (1,250 p.)
+2 głosów
1 odpowiedź 207 wizyt
pytanie zadane 15 kwietnia 2022 w Algorytmy przez wojtikozi Nowicjusz (160 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...