Rezolvare completă PbInfo #596 Numere2

Cerința

Gigel a găsit un șir cu n numere naturale. În fiecare zi Gigel parcurge șirul și când găsește o pereche de elemente consecutive egale o elimină din șir și se oprește. Determinați în câte zile va elimina Gigel elemente din șir și care sunt valorile din șir după eliminări.

Date de intrare

Fișierul de intrare numere2.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații, reprezentând elementele șirului.

Date de ieșire

Fișierul de ieșire numere2.out va conține pe prima linie numărul Z de zile în care Gigel face eliminări, iar linia a doua elementele șirului după eliminări, separate prin exact un spațiu.

Restricții și precizări

  • 1 ≤ n ≤ 25.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 100
  • la sfârșit în șir va fi cel puțin un element

Exemplu

numere2.in

8
1 2 3 3 2 2 3 3

numere2.out

3
1 2

Explicație

După prima zi șirul devine: 1 2 2 2 3 3.
După a doua zi șirul devine: 1 2 3 3.
După a treia zi șirul devine: 1 2.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Numere2:

//problema numere2
/*
 *  Pe masura ce citim o valoare, o comparam cu ultimul element al sirului
 *      daca sunt diferite, o adaugam in sir
 *      daca sunt egale, stergem ultimul element din sir - practic micsoram numarul de elemente
 * 
 * */

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("numere2.in");
ofstream fout("numere2.out");

int v[25001], n, m;

int main(){
    fin >> m;
    int cnt = 0, x;
    n = 0;
    for(int i = 1; i <= m ; ++i)
    {
        fin >> x;
        if(n > 0 && v[n] == x)
            n --, cnt ++;
        else
            v[++n] = x;
    }
    fout << cnt << endl;
    for(int i = 1 ; i <= n ; ++i)
        fout << v[i] << " ";
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #596 Numere2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #596 Numere2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!