Cod sursa(job #374149)

Utilizator titusuTitus C titusu Data 16 decembrie 2009 10:41:19
Problema Nivele Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
/*
 * 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;
}