Cod sursa(job #137531)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 17 februarie 2008 12:34:38
Problema Nivele Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 0.82 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const long MAX=50010;
long A[2][MAX];
long n,t;

int solve() {
	long i,m,k,nn, d;
	for (i=0, m=0; i<n; ++i) m = max(A[0][i],m);
	for (k = 1; m>1; --m, k=!k) {
		nn = n;
		for (i=0, d=0; i+d<n; ++i)
			if ( A[!k][i+d]==m && A[!k][i+d]==A[!k][d+i+1] )
				A[k][i] = m-1, nn--, ++d;
			else
				A[k][i] = A[!k][i+d];
/*		for (i=0; i<nn; ++i)
			printf("%ld ", A[k][i]);
		printf("\n");
*/		if ( n==nn ) 
			return 0;
		n = nn;
	}
	return n==1 ;
}

int main() {
	freopen("nivele.in", "r", stdin); 
	freopen("nivele.out", "w", stdout);
	
	scanf("%ld", &t);
	while ( t-- ) {
		scanf("%ld", &n);
		long i;
		for (i=0; i<n; ++i)
			scanf("%ld", A[0]+i);
		if ( solve() )
			printf("DA\n");
		else
			printf("NU\n");
	}

	fclose(stdout);
	fclose(stdin);
	return 0;
}