Permutari circulare - Aproape rezolvata!
Am de rezolvat o problema in C++ cu permutari circulare.
Am reusit sa scriu codul, rezultatul este ok doar ca pe platforma imi da "Limită de timp depășită" si obtin doar 68 de puncte
Atasez codul mai jos. Ma poate ajuta cineva sa-mi explice unde gresesc?
Multumesc frumos!
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ă 3numere: 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
4 1 -1
1 2 3 4
Date de iesire
4 1 2 3
EXEMPLU
Date de intrare
4 2 1
1 2 3 4
Date de iesire
3 4 1 2
COD
#include
using namespace std;
int main(){
int i, n, v[1000001], aux = 0, p, z, k;
cin >> n >> z >> p;
for (i = 1; i <= n; ++i){
cin >> v[i];
}
if (p == -1)
for (k = 1; k <= z; ++k){
aux = v[n];
for (i = n; i >= 2; --i)
v[i] = v[i - 1];
v[1] = aux;
}else if (p == 1){
for (k = 1; k <= z; ++k){
aux = v[1];
for (i = 1; i <= n - 1; ++i)
v[i] = v[i + 1];
v[n] = aux;
}
}
for (i = 1; i <= n; ++i)
cout << v[i] << " ";
return 0;
}
Răspunsuri la întrebare
Răspuns de
5
COROANA TE ROG!!!
#include<iostream>
using namespace std;
int main() {
int n, p, k, v[1000001];
cin >> n;
for (int i = 1; i <= n; i++) cin >> v[i];
cin >> k >> p;
if (p == -1)
while (k != 0) {
int x = v[1];
for (int i = 2; i <= n; i--) v[i - 1] = v[i];
v[n] = x;
k--;
}
else
while (k != 0) {
int x = v[n];
for (int i = n - 1; i >= 1; i--) v[i + 1] = v[i];
v[1] = x;
k--;
}
for (int i = 1; i <= n; i++) cout << v[i] << ' ';
}
drcompress:
nu o urc pe platforma pana nu ma asigur ca nu da ce trebuie la mine
1 2 3 4
4 3 2 1
1 2 3 4
1 2 4 3
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă