Unfortunately we were unable to fully decode your file, as it is not encoded in UTF-8. You can try to decode it yourself by downloading it here.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ISNUMERIC(x) (x >= '0' && x <= '9')

#define COMPFUNC

int getInt()
{
	static char num[12];
	int n = 0;
	int c;
	for(c = getchar(); !ISNUMERIC(c); c = getchar());
	num[n++] = c;
	for(c = getchar(); ISNUMERIC(c); c = getchar()){
		num[n++] = (char) c;
	}
	num[n] = 0;
	return atoi(num);
}

int compareUnsigned(const void *a, const void *b){
	if( *((unsigned *)a) > *((unsigned *)b) ) return -1;
	if( *((unsigned *)a) < *((unsigned *)b) ) return  1;
	return 0;
}

int main(int argc, char **argv)
{
	int n;
	int m;
	
	int N;
	int M;
	
	int id;
	
	int pid;
	
	bool success = true;
	
	unsigned *przedmioty;
	unsigned *plecaki;
	
	
	n = getInt();
	m = getInt();
	
	przedmioty = new unsigned[n];
	plecaki = new unsigned[m];
	
	for(int i=0;i<n;++i){
		*(przedmioty + i) = getInt();
	}
	for(int i=0;i<m;++i){
		*(plecaki + i) = getInt();
	}
	// Sortuje malejaco
	qsort(przedmioty,n,sizeof(int),compareUnsigned);
	qsort(plecaki,m,sizeof(int),compareUnsigned);
	N = M = 0;
	pid = 0;
	id = 0;
	while(N < n){
		
		while(*(przedmioty + pid) <= 0 && pid < m) ++pid; // Najwi�kszy przedmiot
		if(id >= m || *(przedmioty + pid) > *(plecaki + id)){ // Najwiekszy przedmiot sie nie miesci lub brak plecaka
			success = false;
			break;
		}
		// Najwiekszy przedmiot do plecaka
		*(plecaki + id) -= *(przedmioty + pid);
		// Przedmiot oznaczamy za zabrany
		*(przedmioty + pid) = 0;
		++N;
		for(int i = ++pid;i<n && *(plecaki + id) > 0;++i){
			if(*(przedmioty + i) > 0){
				if(*(przedmioty + i) <= *(plecaki + id)){
					*(plecaki + id) -= *(przedmioty + i);
					*(przedmioty + i) = 0;
					++N;
				}
			}
		}
		// 0 = brak miejsca
		*(plecaki + id++) = 0;
		++M;
	}
	
	if(success)
		printf("%d\n",M);
	else
		puts("NIE");
	
	delete plecaki;
	delete przedmioty;
	
	
	return 0;
}