Informatică, întrebare adresată de moldobogdan1234, 8 ani în urmă

Cine ma poate ajuta cu problema asta? In c++

Cerință
Considerăm un șir format din n elemente. Definim următoarele operații astfel:

permutare circulară la stânga: mutarea primului element la sfârșitul șirului 1 2 3 4 -> 2 3 4 1 -> 3 4 1 2
permutare circulară la dreapta: mutarea ultimului element la începutul șirului 1 2 3 4 -> 4 1 2 3 -> 3 4 1 2
Dându-se un șir format din n elemente și două numere k și p, să se permute cu k poziții la dreapta dacă p este -1, respectiv la stânga dacă p este 1.

Date de intrare
Pe prima linie se află 3 numere: n , k și p. Pe următoarea linie se găsesc n numere naturale, reprezentând elementele șirului.

Date de ieșire
Se vor afișa n numere pe o singură linie, separate printr-un spațiu, reprezentând elementele șirului obținut în urma operațiilor de permutare.

Restricții
1 ≤ n ≤ 1 000 000
0 ≤ k ≤ 1 000 000
Elementele șirului sunt numere naturale cuprinse între 1 și 1 000
p poate avea doar valorile 1 și -1
Exemplu
Date de intrare Date de ieșire
4 1 -1
1 2 3 4 4 1 2 3
4 2 1
1 2 3 4 3 4 1 2

Răspunsuri la întrebare

Răspuns de AverageCProgrammer
0

#include <vector>

#include <iostream>

using namespace std;

int main() {

   int n, k, p;

   cin >> n >> k >> p;

   vector<int> numere;

   for(int i = 0; i < n; ++i) {

       int x; cin >> x;

       numere.push_back(x);

   }

   if(p == -1) {

       for(int i = 0; i < k; ++i) {

           int nr = numere.back();

           numere.pop_back();

           numere.insert(numere.begin(), nr);

       }

   } else {

       for(int i = 0; i < k; ++i) {

           int nr = numere.front();

           numere.erase(numere.begin());

           numere.push_back(nr);

       }

   }

   for(int nr : numere) {

       cout << nr << ' ';

   }

}


andrei750238: Daca tot ai ales să folosești STL puteai folosi list si ai fi avut o complexitate mult mai buna mult mai ușor
moldobogdan1234: Salut! Primesc limita de timp depasita
Alte întrebări interesante