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

Salut ma puteti ajuta cu problema asta de 3 zile incerc sa o rezolv si nu imi iese.

Date de intrare

Pe prima linie se află două numere, N și M.


Pe următoarele linii se află N numere naturale, numerele de identificare a foilor aflate inițial pe masă(primul număr este asociat primei foi, al doilea număr este asociat celei de-a doua foi…).


Pe următoarele M linii se află operațiile ce trebuie făcute:


1 dacă trebuie extrasă prima foaie

2, urmat de o valoare X, dacă trebuie introdusă o nouă foaie la sfârșit, aceasta având numărul de identificare X.

Date de ieșire


Pe prima linie se va afișa numărul de foi rămase pe biroul lui Andrei în urma executării celor M operații, iar pe a doua linie, numerele de identificare ale acestora.

Restricții


1 ≤ N ≤ 900 000

1 ≤ M ≤ 400 000

Numerele de identificare sunt cuprinse intre 0 și 10 000

Dacă șirul nu mai conține niciun element și trebuie efectuată o operație de tip 1, operația nu va fi efectuată.

Date de intrare Date de ieșire

4 3 5

30 21 81 26 21 81 26 68 64

2 68

2 64

1

Trebuie rezolvata numai cu vecrtori if for sau while.

Răspunsuri la întrebare

Răspuns de drcompress
1

Răspuns:

#include <iostream>

using namespace std;

int main(){

int n, m, foi[1300001], i;

cin >> n;

cin >> m;

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

cin >> foi[i];

}

int op, numar, max_length = n, min_length = 0;

for(i = 0; i < m; i++) {

cin >> op;

if(op == 2) {

cin >> numar;

foi[max_length] = numar;

max_length++;

}else if (op == 1) {

if (min_length < max_length) {

min_length++;

}

}

}

cout << max_length-min_length;

cout << endl;

for(i = min_length; i < max_length; i++) {

cout << foi[i] << " ";

}

return 0;

}

Explicație:


jackoneill302: Salut multumesc dar Problema ruleza in ciclu infinit.
drcompress: Incearca asta
drcompress: #include
using namespace std;
int main(){
int n, m, foi[1300001], i;
cin >> n;
cin >> m;
for(i = 0; i < n; i++) {
cin >> foi[i];
}
int op, numar, max_length = n, min_length = 0;
for(i = 0; i < m; i++) {
cin >> op;
if(op == 2) {
cin >> numar;
foi[max_length] = numar;
max_length++;
}else if (op == 1) {
if (min_length < max_length) {
min_length++;
}
}
}
cout << max_length-min_length;
cout << endl;
for(i = min_length; i < max_length; i++) {
cout << foi[i] << " ";
}

return 0;
}
drcompress: La mine ruleaza perfect
Alte întrebări interesante