Cod sursa(job #1709418)

Utilizator vand_bot_la_PAUPB Mardale Mocanu Vasilache vand_bot_la_PA Data 28 mai 2016 12:10:24
Problema Sate2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 0.84 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;


int t, n, m, k;
int v[3005];
char taken[3005];
int last_i;

int find_max (int M) {
	for (int i = last_i; i >= 0; --i) {
		if (v[i] <= M && !taken[i]) {
			taken[i] = 1;
			return v[i];
		}
	}

	return -1;
}

int main (void) {
	freopen("sate2.in", "r", stdin);
	freopen("sate2.out", "w", stdout);

	scanf("%d", &t);

	while (t) {
		scanf ("%d %d %d", &n, &m, &k);

		memset(taken, 0, sizeof(taken));

		for (int i = 1; i <= n; ++i) {
			scanf("%d", &v[i]);
		}

		sort(v + 1, v + n + 1);

		int S = m / k;

		int over = 0;
		while (k && !over) {
			int s = S;
			last_i = n;

			while (s) {
				int res = find_max(s);
				if (res == -1) {
					over = 1;
					printf("NU\n");
					break;
				}

				s -= res;
			}

			--k;
		}

		if (!over) {
			printf("DA\n");
		}
		--t;
	}
}