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

algorytm, nie moge znalezc blad

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
–2 głosów
320 wizyt
pytanie zadane 22 października 2019 w C i C++ przez niezalogowany
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

struct Element{
public:
    string word;
    int number = 0;
    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; cin >> x; cin >> y;
    n += p;
    for(int i = 0; i < n; ++i){
        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, true);
            }
        }
        else{
            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, true);
            }
        }
    }
    cout << " "
            " ";
    a.show();
    cout << "            " << arr << endl;
    return 0;

}

problem jest w tym, ze to slowo gdzie było 0 nie dodaje się do wyniku.
komentarz 22 października 2019 przez tkz Nałogowiec (42,020 p.)
Masz kilka błędów. A co konkretnego ma robić ten kod?
komentarz 23 października 2019 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

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
0 odpowiedzi 167 wizyt
+1 głos
1 odpowiedź 784 wizyt
+1 głos
3 odpowiedzi 890 wizyt
pytanie zadane 14 listopada 2020 w Rozwój zawodowy, nauka, praca przez KosaTV Obywatel (1,260 p.)

93,187 zapytań

142,203 odpowiedzi

322,021 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2164p. - Adrian Wieprzkowicz
  10. 2006p. - Michal Drewniak
  11. 1950p. - Anonim 3619784
  12. 1909p. - Dawid128
  13. 1901p. - Mikbac
  14. 1744p. - rafalszastok
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...