#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct potwory {
int odebrane_zycie;
int moc_eliksiru;
int pozycja;
};
potwory potwor[100001];
potwory pomocnik[100001];
int j = 0;
int pozycja[100001] = {-1};
bool funkcja (potwory a, potwory b)
{
if(a.moc_eliksiru == b.moc_eliksiru)
{
return (a.odebrane_zycie > b.odebrane_zycie);
}
else
return(a.moc_eliksiru > b.moc_eliksiru);
}
int main ()
{
int liczba_potworow;
scanf("%d", &liczba_potworow);
int punkty_zycia;
scanf("%d", &punkty_zycia);
int dupa = 0;
int dupa1 = 0;
for (int i=0; i<liczba_potworow;i++)
{
scanf("%d",&potwor[i].odebrane_zycie);
scanf("%d",&potwor[i].moc_eliksiru);
potwor[i].pozycja=i+1;
dupa = dupa + potwor[i].odebrane_zycie;
dupa1 = dupa1 + potwor[i].moc_eliksiru;
}
dupa1 = dupa1 + punkty_zycia;
if (dupa >= dupa1)
{
printf("NIE\n");
return 0;
}
sort(potwor,potwor+liczba_potworow, funkcja);
int licznik = 0;
for (int i = 0; i < liczba_potworow; i++)
{
if(punkty_zycia - potwor[i].odebrane_zycie > 0)
{
if(i+1 == liczba_potworow && j == 0)
{
punkty_zycia = punkty_zycia - potwor[i].odebrane_zycie;
pozycja[licznik] = potwor[i].pozycja;
}
else
{
punkty_zycia = punkty_zycia - potwor[i].odebrane_zycie;
punkty_zycia = punkty_zycia + potwor[i].moc_eliksiru;
pozycja[licznik] = potwor[i].pozycja;
}
licznik++;
}
else
{
if(i+1 == liczba_potworow && punkty_zycia - potwor[i].odebrane_zycie <= 0)
{
printf("NIE\n");
return 0;
}
pomocnik[j].odebrane_zycie = potwor[i].odebrane_zycie;
pomocnik[j].moc_eliksiru = potwor[i].moc_eliksiru;
pomocnik[j].pozycja = potwor[i].pozycja;
j++;
}
}
int k = 0;
for (int i = 0, a = j; i < j; i++, a--)
{
if(punkty_zycia - potwor[i].odebrane_zycie > 0)
{
if(i+1 == j && k == 0)
{
punkty_zycia = punkty_zycia - pomocnik[i].odebrane_zycie;
pozycja[licznik] = pomocnik[i].pozycja;
}
else
{
punkty_zycia = punkty_zycia - pomocnik[i].odebrane_zycie;
punkty_zycia = punkty_zycia + pomocnik[i].moc_eliksiru;
pozycja[licznik] = pomocnik[i].pozycja;
}
licznik ++;
}
else
{
if(i+1 == j && punkty_zycia - pomocnik[i].odebrane_zycie <= 0)
{
printf("NIE\n");
return 0;
}
pomocnik[k].odebrane_zycie = pomocnik[i].odebrane_zycie;
pomocnik[k].moc_eliksiru = pomocnik[i].moc_eliksiru;
pomocnik[k].pozycja = pomocnik[i].pozycja;
k++;
}
if (k > 0 && a == 1)
{
j=k;
a=j;
i=-1;
k=0;
}
}
if (punkty_zycia > 0)
{
printf("TAK\n");
for(int i=0; i < liczba_potworow; i++)
{
printf("%d ", pozycja[i]);
}
}
else
printf("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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct potwory { int odebrane_zycie; int moc_eliksiru; int pozycja; }; potwory potwor[100001]; potwory pomocnik[100001]; int j = 0; int pozycja[100001] = {-1}; bool funkcja (potwory a, potwory b) { if(a.moc_eliksiru == b.moc_eliksiru) { return (a.odebrane_zycie > b.odebrane_zycie); } else return(a.moc_eliksiru > b.moc_eliksiru); } int main () { int liczba_potworow; scanf("%d", &liczba_potworow); int punkty_zycia; scanf("%d", &punkty_zycia); int dupa = 0; int dupa1 = 0; for (int i=0; i<liczba_potworow;i++) { scanf("%d",&potwor[i].odebrane_zycie); scanf("%d",&potwor[i].moc_eliksiru); potwor[i].pozycja=i+1; dupa = dupa + potwor[i].odebrane_zycie; dupa1 = dupa1 + potwor[i].moc_eliksiru; } dupa1 = dupa1 + punkty_zycia; if (dupa >= dupa1) { printf("NIE\n"); return 0; } sort(potwor,potwor+liczba_potworow, funkcja); int licznik = 0; for (int i = 0; i < liczba_potworow; i++) { if(punkty_zycia - potwor[i].odebrane_zycie > 0) { if(i+1 == liczba_potworow && j == 0) { punkty_zycia = punkty_zycia - potwor[i].odebrane_zycie; pozycja[licznik] = potwor[i].pozycja; } else { punkty_zycia = punkty_zycia - potwor[i].odebrane_zycie; punkty_zycia = punkty_zycia + potwor[i].moc_eliksiru; pozycja[licznik] = potwor[i].pozycja; } licznik++; } else { if(i+1 == liczba_potworow && punkty_zycia - potwor[i].odebrane_zycie <= 0) { printf("NIE\n"); return 0; } pomocnik[j].odebrane_zycie = potwor[i].odebrane_zycie; pomocnik[j].moc_eliksiru = potwor[i].moc_eliksiru; pomocnik[j].pozycja = potwor[i].pozycja; j++; } } int k = 0; for (int i = 0, a = j; i < j; i++, a--) { if(punkty_zycia - potwor[i].odebrane_zycie > 0) { if(i+1 == j && k == 0) { punkty_zycia = punkty_zycia - pomocnik[i].odebrane_zycie; pozycja[licznik] = pomocnik[i].pozycja; } else { punkty_zycia = punkty_zycia - pomocnik[i].odebrane_zycie; punkty_zycia = punkty_zycia + pomocnik[i].moc_eliksiru; pozycja[licznik] = pomocnik[i].pozycja; } licznik ++; } else { if(i+1 == j && punkty_zycia - pomocnik[i].odebrane_zycie <= 0) { printf("NIE\n"); return 0; } pomocnik[k].odebrane_zycie = pomocnik[i].odebrane_zycie; pomocnik[k].moc_eliksiru = pomocnik[i].moc_eliksiru; pomocnik[k].pozycja = pomocnik[i].pozycja; k++; } if (k > 0 && a == 1) { j=k; a=j; i=-1; k=0; } } if (punkty_zycia > 0) { printf("TAK\n"); for(int i=0; i < liczba_potworow; i++) { printf("%d ", pozycja[i]); } } else printf("NIE"); return 0; } |
English