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

Salutare!

Am o intrebare pentru cei cu cunostinte de c++.
Am rezolvat o problema. Vedeti descrierea si codul mai jos.
Problema este insa ca la verificare imi da o eroare in compilator spunandu-mi si ca am depasit limita de timp pentru raspuns.

Ma poate ajuta cineva? Cred ca de fapt este o problema de optimizare a codului si a solutiei de citire a sirului. Posibil sa nu fi folositi cea mai buna cale.

Cerință
Se dă un șir de N numere întregi asupra căruia se fac următoarele operații: eliminarea ultimului element din șir (pop) și adăugarea unui element X la finalul șirului (push X). Să se afișeze șirul după aplicarea operațiilor date.

Structura de date introdusă mai sus, asupra căreia se pot executa doar operații de tip push X și pop, se numește stivă. Stiva este o structură de date des utilizată în informatică și se spune că are tipul last in, first out datorită felului în care accesăm date salvate în ea. Aceasta este folosită atât la implementarea recursivității în limbajele de programare, cât și ca structură auxiliară la traversarea unor structuri de date mai complicate, cum sunt arborii și grafurile.

Date de intrare
Se citește numărul natural N, reprezentând numărul de elemente ale șirului inițial și N numere întregi, reprezentând elementele șirului. Apoi se citesc M valori de k unde k poate avea valoarea 1 sau 2. Dacă k are valoarea 1, se va citi imediat după acesta un număr întreg X şi se va efectua operaţia push X. Dacă kare valoarea 2 se va efectua operaţia pop.

Date de ieșire
Se va afișa pe ecran șirul de numere obținut în urma aplicării operațiilor date asupra șirului inițial. Pe prima linie se va afișa numărul T, reprezentând numărul de elemente ale noului șir, iar pe cea de a doua linie se vor afișa cele T elementele ale șirului, separate prin spații.

Restricții şi precizări
N și M sunt numere naturale cuprinse în intervalul [1, 10 000].
Fiecare element din șir este cuprins în intervalul [-2 000 000 000, +2 000 000 000].
k va avea întotdeauna valoarea 1 sau 2.
X are valori cuprinse în intervalul [-2 000 000 000, +2 000 000 000].
Nu vor fi operatii de tipul 2 cand stiva e goala.

Exemplu
Date de intrare Date de ieșire
7
5 -4 0 -7 7 7 2
5
2
1 100
2
1 0
1 3
Date de iesire
8
5 -4 0 -7 7 7 0 3

Codul problemei rezolvate
#include
using namespace std;
int main(){
int n, v[10001], z, i, k = 0;
cin >> n;
for(i = 1; i <= n; i++){
cin >> v[i];
}
int m, w[10001];
cin >> m;
for(int i = 1; i <= m; ++i){
cin >> w[k];
for(int i = 1; i <= m; ++i)
if (w[k] == 1){
cin >> z;
n = n + 1;
v[n] = z;
for(i = 1; i <= n; ++i)
cout << "";
}else if (w[k] == 2){
for(i = 1; i <= n; i++)
cout << "";
--n;
}
}
cout << n << " ";
cout << endl;
for(i = 1; i <= n; ++i)
cout << v[i] << " ";
cout << endl;
return 0;
}

EROAREA PRIMITA
Avertizări și erori de compilare:
prog.cpp: In function 'int main()':
prog.cpp:21:17: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
for(i = 1; i <= n; i++)
^~~

prog.cpp:23:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'

--n;

^~

0.0863 Limită de timp depășită
0.0275 Output Limit Exceeded
0.0863 Limită de timp depășită

Răspunsuri la întrebare

Răspuns de ovdumi
2

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int N, M, i, j, k, X, v[10000], lungime_sir;

   cin>>N;

   lungime_sir=N;

   for (i=1; i<=lungime_sir; i++)

       cin>>v[i];

   cin>>M;

   for (j=1; j<=M; j++)

   {

       cin>>k;

       if (k==1)

       {

           cin>>X;

           lungime_sir++;

           v[lungime_sir]=X;

       }

       if (k==2)

           lungime_sir--;

   }

   cout<<lungime_sir<<endl;

   for (i=1; i<=lungime_sir; i++)

       cout<<v[i]<<" ";

   return 0;

}


drcompress: Salut! Multumesc mult de tot dar am rezolvat-o intre timp.
drcompress: Ma poti ajuta la altele? Unde iti pot scrie?
ovdumi: scrie-mi aici daca vrei
drcompress: Multumesc! Uite inca o problema la care nu ma descurc
drcompress: nu o pot pune la comentarii
drcompress: este prea lunga si depaseste numarul de caractere :)
lucaciucandrei: invata sa folosesti stack ;)
drcompress: Multumesc. La ce te referi mai exact? La asta? https://stackoverflow.com
lucaciucandrei: nu! ma refeream la rezolvarea destul de slabuta a domnului ovdumi
Alte întrebări interesante