Sunteți pe pagina 1din 2

EXPLICATIE: (programul merge doar pentru exemplul 1, nu si al doilea)

Creem 2 vectori, unul in care memoram numerele citite din sir ca sunt “bine asezate”, adica egale cu
pozitia lor in brain.in, si altul in care punem valoarea 1 pentru sumele care se pot forma cu numerele
“bine aseazate”. Dupa citirea intregului fisier de intrare, afisam numerele din primul vector v, in care
am memorat numerele “bine asezate”. Pentru fiecare numar memorat in v, am crescut, incepand de la
0, un contor k, pentru a putea sti lungimea sirului. In vectorul v toate numerele sunt diferite intre ele,
deci, pentru cerinta a doua, afisam suma tuturor elemetelor din vector (care sigur are valoarea maxima
ceruta). Pentru a treia cerinta, luam un contor x, pentru a stii cate numere consecutive adaug la o suma
s, ca dupa sa notez in vectorul c pentru suma dintre s si un numar din v, care nu a fost adaugat la s, cu
1. Contorul x creste pana cand el este mai mic decat k. Dupa efectuarea tuturor operatiunilor,
initializam contorul x cu 1 si il crestem cu cate 1 pana cand valoarea respective acestuia in vectorul c
este 1. Dupa, afisam x.

C++ : Pseudocod:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int v[1000001], c[1000001]; intreg v[1000001], c[1000001]

int main(){ start


ifstream in("brain.in"); intreg n, k, a, s, i, j;
ofstream out("brain.out"); k<-1; s<-0;
int n, k=0, a, s=0;; citeste n;
in>>n; pentru i<-1, n executa
for(int i=1;i<=n;i++){ citeste a;
in>>a; daca a=i atunci
if(a==i){ v[k]<-a;
v[++k]=a; k<-k+1;
//prima cerinta scrie a, ‘ ’;
out<<a<<' '; s<-s+a;
//a doua cerinta stop
s+=a; stop
} scrie ‘\n’, s, ‘\n’;
} intreg x<-0;
out<<endl<<s<<endl; cat timp x<k executa
//cerinta a treia intreg cx;
int x=0; pentru i<-1, n executa
while(x<k){ cx<-x; s<-v[i];
int cx; cat timp cx != 0 executa
for(int i=1;i<=k;i++){ s<-cx+v[i+cx];
cx=x; s=v[i]; cx<-cx-1;
while(cx != 0 || i+cx+t <= k){ stop
s+=v[i+cx]; pentru j<-i+x+1, k executa
cx--; c[s+v[j]]=1;
} stop
for(int j=i+x+1;j<=k;j++) x<-x+1;
c[s+v[j]]=1; stop
x=1;
} cat timp c[x]=1 executa
x++; x<-x+1;
} scrie x;
x=1; stop
while(c[x]==1)
x++;
out<<x;
}

S-ar putea să vă placă și