Informatică, întrebare adresată de Ouroboros, 9 ani în urmă

C++
#283

Cerinţa

Se dă un şir cu n elemente, numere naturale. Determinaţi cea mai lungă secvenţă de elemente din şir cu proprietatea că oricare două valori consecutive în secvenţă au parităţi diferite.

Dacă există mai multe secvente de lungime maximă cu această proprietate, se va determina aceea cu suma elementelor maximă. Dacă există mai multe secvenţe de lungime maximă cu aceeaşi sumă maximă a elementelor se va determina cea mai din dreapta.
Date de intrare

Fişierul de intrare secventa.in conţine pe prima linie numărul n; urmează cele n elemente ale şirului, dispuse pe mai multe linii şi separate prin spaţii.
Date de ieşire

Fişierul de ieşire secventa.out va conţine pe prima linie două numere p şi u, separate printr-un spaţiu, reprezentând indicele primului, respectiv al ultimului element din secvenţa determinată.
Restricţii şi precizări

1 ≤ n ≤ 100000;
elementele şirului vor avea cel mult 9 cifre şi sunt numerotate de la 1 la n;


Exemplu

secventa.in

10
2 4 3 6 7 5 2 5 8 10

secventa.out

6 9

Explicație

Există două secvenţe de elemente care respectă regula precizată de lungime maximă. Suma elementelor din cele două secvenţe este aceeaşi, astfel că s-a afişat secvenţa cea mai din dreapta.

Răspunsuri la întrebare

Răspuns de ionutg38
7
#include <fstream> using namespace std; ifstream cin("secventa.in"); ofstream cout("secventa.out"); int n,a,nr; int main() { cin>>n; cin>>a; int s=a,sant=a; int i,ant,ini=1,inic=1,fin,L=0,Lmax=0; for(i=2;i<=n;i++) { ant=a; cin>>a; //cout<<"a= "<<a<<' '; if((ant%2&&a%2)||(ant%2==0&&a%2==0)) { //L=i-ini; cout<<" L= "<<L<<" Lmax= "<<Lmax<<" s= "<<s<<" sant= "<<sant<<endl; if(L>=Lmax) { Lmax=L; if(s>=sant) { fin=i-1; inic=ini; sant=s; } } ini=i; s=a; } else { s+=a; } } L=i-ini; if(L>=Lmax) { Lmax=L; if(s>=sant) { fin=i-1; inic=ini; } } cout<<inic<<' '<<fin; return 0; }
Alte întrebări interesante