1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
using namespace std;


// Struktura ELEMENTU
struct elem{
    int dane;       // Dane obiektu
    elem * nast;    // Wskazanie na następny obiekt
};


// Dodaj element na stos
void push(elem * &stos, int x){
    elem * nowy = new elem; // Stwórz element

    nowy -> dane = x;       // Dodaj dane
    nowy -> nast = stos;    // Wskaż na poprzedni obiekt
    stos = nowy;
}


// Zdejmij element ze stosu
int pop(elem * &stos){

    // Czy coś jest na stosie?
    if(stos != NULL){
        elem * stary = stos;        // zapamiętaj ostatnią wartość na stosie
        int wynik = stos -> dane;   // spisz wartość obiektu
        stos = stary->nast;         // przekieruj stos poziom niżej
        delete stary;               // zniszcz zdjęty obiekt
        return wynik;               // wypisz wynik na wyjście
    }

    // Stos jest pusty!
    else{
        cout << "Stos jest pusty..." << endl;
        return 0;
    }
}


// Dodaj element do KOLEJKI
void add(elem* &pocz, elem* &kon, int x){

    // Jeśli kolejka nie jest pusta
    if(kon!=NULL){
        elem* nowy = new elem;  // Stwórz nowy element
        nowy->dane = x;         // Przypisz mu dane
        nowy->nast = NULL;      // Wskaż na wolne miejsce
        kon->nast = nowy;       // Przesuń koniec kolejki
        kon = nowy;             // Przypisz ostatni element
    }

    // Kolejka jest pusta
     else {
        elem* nowy = new elem;  // Stwórz nowy element
        nowy->dane = x;         // Przypisz mu dane
        nowy->nast = NULL;      // Wskaż na wolne miejsce
        kon = nowy;             // Przypisz ostatni element
        pocz = nowy;            // Przypisz pierwszy element
    }

}


// Wyrzuć element z kolejki
int next(elem * &pocz, elem* &kon){

    // Jeśli kolejka nie jest pusta
    if(pocz!=NULL){
        elem* stary = pocz;         // Wczytaj element
        int wynik = stary->dane;    // Zapisz wynik
        if (pocz==kon) kon=NULL;    // Jeśli to był jedyny element wyzeruj kolejke
        pocz = stary->nast;         // Przesuń początek
        delete stary;               // Usuń element
        return wynik;               // Zwróć wynik
    }

    // Kolejka pusta
    else{
        cout << "Kolejka jest pusta..." << endl;
        return 0;
    }

}


// Odwroc stos kolejka
void obrotKolej(elem* &stos, elem* &pocz, elem* &kon){

    // Przenoś stos do kolejki
    while(stos!=NULL){
        add(pocz, kon, pop(stos));
    }

    // Przenos z kolejki na stos
    while(kon!=NULL){
        push(stos,next(pocz,kon));
    }

}


// Pokaz stos
void pokazStos(elem* stos){

	elem* tmp = stos;       // Stos pomocniczy
	while (tmp != NULL) {   // Dopóki nie jest pusty

		if (tmp != stos) {  // Dodawaj stralki
			cout << " ";
		}

		cout << tmp->dane;  // Pokaz wartosc
		tmp = tmp->nast;    // Przesun stos pomocniczy
	}

	cout << endl; // Dodaj enter
}



int main()
{
    elem *stos1 = NULL;
    int n, t, a;
    cin >> n;
    cin >> t;

    while(cin>>a){
        push(stos1, a);

        if(cin.eof()) break;
    }

    if(t%2!=0){
        pokazStos(stos1);
    }

    else{
        elem *pocz = NULL;
        elem *kon = NULL;
        obrotKolej(stos1,pocz,kon);
        pokazStos(stos1);
    }

    return 0;
}