Cod sursa(job #137343)

Utilizator MariusMarius Stroe Marius Data 17 februarie 2008 11:26:17
Problema Nivele Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 0.9 kb
#include <cstdio>

#include <set>
#include <algorithm>

using namespace std;

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

#define MAXN  50005
#define FOR(i, a, b) for (int i = (a); i < (b); ++ i)

FILE *fi;

multiset <int, greater <int> > myset;

int n;

void read_in(void)
{
	int x;

	fscanf(fi, "%d", &n);

	FOR(i, 0, n)
	{
		fscanf(fi, "%d", &x);
		myset.insert(x);
	}
}

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

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

	int css;

	for (fscanf(fi, "%d", &css); css > 0; -- css)
	{
		myset.clear();
		read_in();

		bool sol = true;

		FOR(i, 1, n)
		{
			int x = *myset.begin();
			myset.erase(myset.begin());
			int y = *myset.begin();
			myset.erase(myset.begin());

            if (x == y)
				myset.insert(x - 1);
			else {
				sol = false;
				break ;
			}
		}

		if (sol)
			fprintf(fo, "DA\n");
		else
			fprintf(fo, "NU\n");
	}

	fcloseall();

	return 0;
}