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
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

int liczba_potworow, zycie, obrazenia, leczenie;
pair<int, pair<int, int> >a;
priority_queue<pair<int, pair<int, int> > >Qdobre, Qzle;
vector<int>V;

int main()
{
    scanf("%d %d", &liczba_potworow, &zycie);
    for(int c=1; c<=liczba_potworow; c++){
        scanf("%d %d", &obrazenia, &leczenie);
        if(leczenie-obrazenia>0)
            Qdobre.push(make_pair(-obrazenia, make_pair(leczenie, c) ) );
        else
            Qzle.push(make_pair(leczenie, make_pair(obrazenia, c) ) );
    }
    while(!Qdobre.empty()){
        a=Qdobre.top();
        Qdobre.pop();
        obrazenia=-a.first;
        leczenie=a.second.first;
        if(obrazenia>=zycie){
            printf("NIE\n");
            return 0;}
        V.push_back(a.second.second);
        zycie=zycie-obrazenia+leczenie;
    }
    while(!Qzle.empty()){
        a=Qzle.top();
        Qzle.pop();
        leczenie=a.first;
        obrazenia=a.second.first;
        if(obrazenia>=zycie){
            printf("NIE\n");
            return 0;}
        V.push_back(a.second.second);
        zycie=zycie-obrazenia+leczenie;
    }
    printf("TAK\n");
    for(int c=0; c<liczba_potworow; c++)
        printf("%d ", V[c]);
    return 0;
}