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

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 lucaciucandrei
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
drcompress: acum da asa
drcompress: 4 2 1
1 2 3 4
4 3 2 1
drcompress: 4 1 -1
1 2 3 4
1 2 4 3
lucaciucandrei: mai am o ultima reduta... daca nici asta nu merge tine minte de la mine... in viata nu se face treaba cu prostie ;) cauta ce e bun
drcompress: offf. crede-ma ca m-am documentat inainte de a face pasul asta dar se pare ca am dat gres intr-un fel anume
drcompress: eu sunt 0 barat la programare si nu am de unde sa stiu toate dedesubturile
drcompress: eu sunt de buna credinta in sensul in care am vrut sa fac ceva aplicat si cat de cat aprofundat
drcompress: dar aici la erori de genul asa cu limita de timp depasita in conditiile in care am rezultatul bun. E clar ca poate sunt pe calea cea buna in abordarea problemei insa ceva imi scapa. Ca incepator, poti sa ma bati ca nu ma prind. :)
lucaciucandrei: nu te bat mai... ma refeream sa lasi wellcode ca e cum e ... :))) si sa te apuci de pbinfo si/sau info arena ca acolo e de joaca adevarata
Alte întrebări interesante