Pagini recente » Cod sursa (job #2493772) | Cod sursa (job #162769) | Cod sursa (job #2238781) | Cod sursa (job #278432) | Cod sursa (job #374149)
Cod sursa(job #374149)
/*
* daca in sirul de nivele am doua valori consecutive egale, le elimin si le inlocuiesc cu (nivelul_lor-1) (cele doua frunze se inlocuiesc cu parintele) .
* repet poveste cat pot.
* Daca la sfarsit in sir am un singur element, raspunsul este afirmativ (sirul este sir de nivele)
*
* Pentru eficienta, folosim o stiva:
* daca valoarea de adaugat este egala cu valoarea din varful stivei, elimin valoarea din varful stivei, micsorez valoarea de adaugat, si reiau povestea.
* daca nu, o adauga
*
* */
using namespace std;
#include <fstream>
int stiva[50010],nrs;
void Adauga_REC(int x){
if(nrs==0){
stiva[++nrs]=x;return ;
}
if(stiva[nrs]!=x){
stiva[++nrs]=x;return ;
}
nrs--;
Adauga_REC(x-1);
}
void Adauga(int x){
while(nrs && stiva[nrs]==x)
nrs--,x--;
stiva[++nrs]=x;
}
int main(){
ifstream fin("nivele.in");
ofstream fout("nivele.out");
int T,n,x;
fin>>T;
for( ; T ; T--){
nrs=0;
fin>>n;
for( ; n ; --n){
fin>>x;
Adauga(x);
}
if(nrs==1 && stiva[nrs]==1)
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}