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
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
Alte întrebări interesante
Matematică,
8 ani în urmă
Franceza,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
9 ani în urmă