#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
bool debug = false;
if (argc > 1)
{
debug = true;
cout << "tryb debugowania" << endl;
}
int ileprzed = 0, ileplec = 0;
scanf("%d %d", &ileprzed, &ileplec);
if (debug == true) cout << "mamy " << ileprzed << " przedmiotów oraz " << ileplec << " plecaków" << endl;
int tab[ileprzed];
int plecaki[ileplec];
for (int i = 0; i < ileprzed; i++) scanf("%d", &tab[i]);
for (int i = 0; i < ileplec; i++)
{
scanf("%d", &plecaki[i]);
}
sort(tab, tab + ileprzed);
reverse(tab, tab + ileprzed);
sort(plecaki, plecaki + ileplec);
reverse(plecaki, plecaki + ileplec);
if (debug == true)
{
cout << "przedmioty: ";
for (int i=0;i < ileprzed; i++) cout << tab[i] << " ";
cout << endl;
cout << "plecaki: ";
for (int i=0;i < ileplec; i++) cout << plecaki[i] << " ";
cout << endl;
}
if (tab[0] > plecaki[0]) puts("NIE");
else
{
int pocz = 0, kon = ileprzed - 1, wynik = 0, ktory = 0;
while (pocz <= kon)
{
int pojem = plecaki[ktory];
if (debug == true) cout << "bierzemy plecak o pojemnosci " << pojem << endl;
ktory ++;
if (ktory == ileplec && tab[pocz] > plecaki[ktory])
{
puts("NIE");
return 0;
}
int wplecaku = 0;
bool dokladamy = true;
while (dokladamy == true)
{
dokladamy = false;
wplecaku += tab[pocz];
if (wplecaku < pojem && pocz<= kon)
{
if (debug == true)
{
cout << "z dużych dokladamy" << tab[pocz] << endl;
}
pocz++;
dokladamy = true;
}
}
if (wplecaku > pojem)
{
wplecaku = wplecaku - tab[pocz];
}
dokladamy = true;
while (dokladamy == true)
{
dokladamy = false;
wplecaku += tab[kon];
if (wplecaku <= pojem && pocz <= kon)
{
if (wplecaku < pojem)
{
if (debug == true)
{
cout << "z malych dokladamy" << tab[kon] << endl;
}
dokladamy = true;
kon --;
}
}
}
if (wplecaku > pojem)
{
wplecaku = wplecaku - tab[kon];
//kon ++;
}
wynik += 1;
}
printf("%d\n", wynik);
}
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 102 103 104 105 | #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; int main(int argc, char *argv[]) { bool debug = false; if (argc > 1) { debug = true; cout << "tryb debugowania" << endl; } int ileprzed = 0, ileplec = 0; scanf("%d %d", &ileprzed, &ileplec); if (debug == true) cout << "mamy " << ileprzed << " przedmiotów oraz " << ileplec << " plecaków" << endl; int tab[ileprzed]; int plecaki[ileplec]; for (int i = 0; i < ileprzed; i++) scanf("%d", &tab[i]); for (int i = 0; i < ileplec; i++) { scanf("%d", &plecaki[i]); } sort(tab, tab + ileprzed); reverse(tab, tab + ileprzed); sort(plecaki, plecaki + ileplec); reverse(plecaki, plecaki + ileplec); if (debug == true) { cout << "przedmioty: "; for (int i=0;i < ileprzed; i++) cout << tab[i] << " "; cout << endl; cout << "plecaki: "; for (int i=0;i < ileplec; i++) cout << plecaki[i] << " "; cout << endl; } if (tab[0] > plecaki[0]) puts("NIE"); else { int pocz = 0, kon = ileprzed - 1, wynik = 0, ktory = 0; while (pocz <= kon) { int pojem = plecaki[ktory]; if (debug == true) cout << "bierzemy plecak o pojemnosci " << pojem << endl; ktory ++; if (ktory == ileplec && tab[pocz] > plecaki[ktory]) { puts("NIE"); return 0; } int wplecaku = 0; bool dokladamy = true; while (dokladamy == true) { dokladamy = false; wplecaku += tab[pocz]; if (wplecaku < pojem && pocz<= kon) { if (debug == true) { cout << "z dużych dokladamy" << tab[pocz] << endl; } pocz++; dokladamy = true; } } if (wplecaku > pojem) { wplecaku = wplecaku - tab[pocz]; } dokladamy = true; while (dokladamy == true) { dokladamy = false; wplecaku += tab[kon]; if (wplecaku <= pojem && pocz <= kon) { if (wplecaku < pojem) { if (debug == true) { cout << "z malych dokladamy" << tab[kon] << endl; } dokladamy = true; kon --; } } } if (wplecaku > pojem) { wplecaku = wplecaku - tab[kon]; //kon ++; } wynik += 1; } printf("%d\n", wynik); } return 0; } |
English