Cod sursa(job #137751)

Utilizator MariusMarius Stroe Marius Data 17 februarie 2008 14:17:17
Problema Nivele Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

using namespace std;

const char iname[] = "nivele.in";
const char oname[] = "nivele.out";

#define MAXN  50005

FILE *fi;

int n;

int X[MAXN];

bool sol;


void work(int i)
{
	while (i > 1)
	{
		while (i > 1 && X[i - 1] == X[i])
			X[i - 1] --, i --;
		if (i == 1)
			return ;
		int j = i - 1;
		while (j > 1 && X[j - 1] == X[j])
			X[j - 1] --, j --;
		
		if (X[i] != X[j]) {
			sol = false;
			return ;
		} else
			X[j] --, i = j;
	}
}

int main(void)
{
	fi = fopen(iname, "r");

	FILE *fo = fopen(oname, "w");

	int css;

	for (fscanf(fi, "%d", &css); css > 0; -- css)
	{
		fscanf(fi, "%d", &n);

		for (int i = 1; i <= n; ++ i)
			fscanf(fi, "%d", &X[i]);

		sol = true;
		work(n);

		if (X[1] == 1 && sol)
			fprintf(fo, "DA\n");
		else
			fprintf(fo, "NU\n");
	}

	fcloseall();

	return 0;
}