Cod sursa(job #137664)

Utilizator MariusMarius Stroe Marius Data 17 februarie 2008 12:53:31
Problema Nivele Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 0.78 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;

int f(int i)
{
	while (i > 1 && X[i] == X[i - 1])
		X[i - 1] --, i --;
	return i;
}

void work(int i)
{
	while (i > 1 && X[i] == X[i - 1])
		X[i-1] --, i --;

	if (i == 1)
		return ;
	
	int j = f(i - 1);

	if (X[i] != X[j])
		sol = false;
	else
		X[j] --, work(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;
}