#include <stdio.h>
#include <stdlib.h>
#define NAJW_SMOKOW 100 ## 000
struct smok {
int sila, eliksir, nr_porzadkowy;
};
int od_najslabszego(const void *a, const void *b)
{
return ((struct smok*)a)->sila - ((struct smok*)b)->sila;
}
int od_najsilniejszego(const void *a, const void *b)
{
return ((struct smok*)b)->sila - ((struct smok*)a)->sila;
}
int main()
{
struct smok hojne[NAJW_SMOKOW], skape[NAJW_SMOKOW];
int hojnych = 0, skapych = 0, smokow, zdrowie, sila, eliksir, daSie = 1, i;
scanf("%d %d", &smokow, &zdrowie);
for (i=0;i<smokow;++i)
{
scanf("%d %d", &sila, &eliksir);
if (sila > eliksir)
{
skape[skapych].sila = sila;
skape[skapych].eliksir = eliksir;
skape[skapych].nr_porzadkowy = i+1;
++skapych;
}
else
{
hojne[hojnych].sila = sila;
hojne[hojnych].eliksir = eliksir;
hojne[hojnych].nr_porzadkowy = i+1;
++hojnych;
}
}
qsort(hojne, hojnych, sizeof (*hojne), od_najslabszego);
qsort(skape, skapych, sizeof (*skape), od_najsilniejszego);
for (i=0;i<hojnych;++i)
{
if (zdrowie > hojne[i].sila)
{
zdrowie -= hojne[i].sila;
zdrowie += hojne[i].eliksir;
}
else
{
daSie = 0;
break;
}
}
if (daSie)
{
for (i=0;i<skapych;++i)
{
if (zdrowie > skape[i].sila)
{
zdrowie -= skape[i].sila;
zdrowie += skape[i].eliksir;
}
else
{
daSie = 0;
break;
}
}
}
if (daSie)
{
puts("TAK");
for (i=0;i<hojnych;++i)
printf("%d ", hojne[i].nr_porzadkowy);
for (i=0;i<skapych;++i)
printf("%d ", skape[i].nr_porzadkowy);
puts("");
}
else
{
puts("NIE");
}
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 | #include <stdio.h> #include <stdlib.h> #define NAJW_SMOKOW 100 ## 000 struct smok { int sila, eliksir, nr_porzadkowy; }; int od_najslabszego(const void *a, const void *b) { return ((struct smok*)a)->sila - ((struct smok*)b)->sila; } int od_najsilniejszego(const void *a, const void *b) { return ((struct smok*)b)->sila - ((struct smok*)a)->sila; } int main() { struct smok hojne[NAJW_SMOKOW], skape[NAJW_SMOKOW]; int hojnych = 0, skapych = 0, smokow, zdrowie, sila, eliksir, daSie = 1, i; scanf("%d %d", &smokow, &zdrowie); for (i=0;i<smokow;++i) { scanf("%d %d", &sila, &eliksir); if (sila > eliksir) { skape[skapych].sila = sila; skape[skapych].eliksir = eliksir; skape[skapych].nr_porzadkowy = i+1; ++skapych; } else { hojne[hojnych].sila = sila; hojne[hojnych].eliksir = eliksir; hojne[hojnych].nr_porzadkowy = i+1; ++hojnych; } } qsort(hojne, hojnych, sizeof (*hojne), od_najslabszego); qsort(skape, skapych, sizeof (*skape), od_najsilniejszego); for (i=0;i<hojnych;++i) { if (zdrowie > hojne[i].sila) { zdrowie -= hojne[i].sila; zdrowie += hojne[i].eliksir; } else { daSie = 0; break; } } if (daSie) { for (i=0;i<skapych;++i) { if (zdrowie > skape[i].sila) { zdrowie -= skape[i].sila; zdrowie += skape[i].eliksir; } else { daSie = 0; break; } } } if (daSie) { puts("TAK"); for (i=0;i<hojnych;++i) printf("%d ", hojne[i].nr_porzadkowy); for (i=0;i<skapych;++i) printf("%d ", skape[i].nr_porzadkowy); puts(""); } else { puts("NIE"); } return 0; } |
English