Rezolvare completă PbInfo #2098 Meteo

Centrul de meteorologie dintr-o ţară îndepărtată, aflată aproape de Polul Nord, doreşte să stabilească modul în care încălzirea globală afectează temperaturile din acea ţară. Ei notează pe parcursul a N zile consecutive temperaturile maxime zilnice şi sunt interesaţi să determine cea mai lungă perioadă continuă de timp în care temperaturile înregistrate în zile consecutive au alternat ca semn.

Cerința

Scrieţi un program care, pe baza temperaturilor înregistrate pe parcursul a N zile consecutive, determină o succesiune de zile consecutive având lungime maximă pentru care temperaturile înregistrate au alternat ca semn. Dacă există mai multe astfel de secvenţe, meteorologii sunt interesaţi de cea mai recentă. Dacă nu există măcar două zile consecutive cu temperaturi alternante ca semn, ei vor înregistra rezultatul 0.

Date de intrare

Fişierul de intrare meteo.in conţine pe prima linie numărul natural N, reprezentând numărul total de zile pentru care se efectuează studiul. Pe cea de-a doua linie vor fi scrise N numere întregi separate prin spaţii, al i-lea număr de pe linie fiind temperatura maximă zilnică înregistrată în ziua i a studiului (1≤i≤N).

Date de ieșire

Fişierul de ieşire meteo.out va conţine pe prima linie un număr natural NrMax, reprezentând numărul maxim de zile consecutive pentru care temperaturile au alternat ca semn. Pe cea de a doua linie vor fi scrise NrMax valori întregi, separate prin spaţii, reprezentând temperaturile (alternante ca semn) înregistrate în cele NrMax zile. Dacă există mai multe soluţii, va fi afişată cea mai recentă dintre acestea. În cazul în care nu există nici măcar două zile consecutive cu temperaturi alternante ca semn, fişierul de ieşire va conţine o singură linie, pe care va fi scrisă valoarea 0.

Restricții și precizări

• 3 < N ≤ 1000;
Temperaturile maxime zilnice sunt numere întregi ce aparţin intervalului [-50,50].
Temperatura de 0 grade va fi considerată pozitivă.


Exemplu

meteo.in

16
1 -5 -3 2 -1 7 -2 5 1 7 -9 0 -1 6 -1 -8

meteo.out

6
7 -9 0 -1 6 -1

Explicație

Studiul a fost efectuat pe durata a 16 zile. În această perioadă au existat două secvenţe de zile consecutive având lungime maximă (6) şi în care temperaturile au alternat ca semn (marcate îngroşat în fişierul de intrare). În fişierul de ieşire a fost afişată cea mai recentă dintre ele.

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 Meteo:

// Prof.Anca Uriciuc
#include <fstream>
using namespace std;
ifstream fin("meteo.in");
ofstream fout("meteo.out");
int nrmax, k, i, t, a[1001], n;
int main()
{
    fin >> n;
    nrmax = 0;
    k = 1;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    for (i = 2; i <= n; i++) {
        if ((a[i] >= 0 && a[i-1] < 0) || (a[i-1] >= 0 && a[i] < 0))
            k++;
        else {
            if (k >= nrmax) {
                nrmax = k;
                t = i-1;
            }
            k = 1;
        }
    }
    if (k >= nrmax) {
        nrmax = k;
        t = i-1;
    }
    if ( nrmax == 1)
    fout << 0 << '\n';
    else {
    fout << nrmax << '\n';
    for (i = t+1-nrmax; i <= t; i++)
        fout << a[i] <<" ";
    fout << '\n';
    }
    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 #2098 Meteo

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2098 Meteo 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!