Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#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; }
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; } |